了解GAC:从“找不到Microsoft.SqlServer.SqlClrProvider.dll”的问题开始

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 了解GAC:从“找不到Microsoft.SqlServer.SqlClrProvider.dll”的问题开始                            老帅   先上图,看真相,如下:一、问题描述   我使用Microsoft.SqlServer.Smo开发了一个数据库管理工具,根据定制的需求,完成对SQLServer的管理。
了解GAC:从“找不到Microsoft.SqlServer.SqlClrProvider.dll”的问题开始
                            老帅
   先上图,看真相,如下:


一、问题描述
   我使用Microsoft.SqlServer.Smo开发了一个数据库管理工具,根据定制的需求,完成对SQLServer的管理。部署到客户机以后,就提示上述错误。而这个文件在我本机上使用全盘搜索,无论如何也搜索不到。

二、追根溯源
   经过研究,发现这个文件是SQLServer2012的一个运行时支持库,存在于SQLSysClrType.msi中,下载地址如下:
    http://www.microsoft.com/zh-cn/download/details.aspx?id=43339
  
   包含x86和x64两个版本,请根据自己的需要使用。


三、使用方法

   当然,我们可以把SQLSysClrType.msi安装到客户机中使用,其实我们只需要这个动态库文件而已:

   Microsoft.SqlServer.SqlClrProvider.dll
   事实上只需要把这个文件和我们的exe一起部署到客户机即可,但是安装完SQLSysClrType.msi之后,我们在本机上仍然搜索不到这个动态库。
   原来这个文件安装在系统的GAC中!!!

   什么是GAC?
   微软为提高系统安全,自Vista推出后,在Windows系统中加入了一个新的东东——UAC(User Account Control),这样一个新的技术使得许多操作都受到了约束,尤其是对系统设置、文件的修改,Win7作为一个衍生品,也受到了UAC的保护。
   在.NET项目开发中,针对一些类库项目或用户控件项目,当程序开发完成后,有时需要将开发的程序集,安装部署到GAC(Global Assembly Cache)中,以便其他的程序也可以调用。
   通常,将程序集安装到GAC有两种方法:
   1、将程序集(dll文件)手动拖至 C:/Windows/assembly 文件夹中。
   2、利用命令行或者全局程序集缓存工具Gacutil进行安装。

   原来如此!
   GAC的目录在c:\windows\assembly, 而这个目录是不允许你直接复制粘贴的,只能使用命令行 ,你会发现GAC的目录结构与Windows Explorer展示给你的看的目录不同:


   为了把文件拿出来, 你需要使用命令行:
     
   这样就可以拿到你需要的动态库了!!!
 



相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
Windows
解决方法:未能加载文件或程序集“Microsoft.Office.Interop.Excel。。
.NET错误提示:未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。
2372 0
|
关系型数据库 MySQL
安装MySQL找不到MSVCR120.dll【已解决】
安装MySQL找不到MSVCR120.dll【已解决】
372 0
|
Windows
WINDOWS下获得DLL所在目录的代码
WINDOWS下获得DLL所在目录的代码
152 0
|
SQL 数据库管理 Windows
Windows环境VS2017,如何编译得到SQLite的sqlite3.lib文件?已知dll文件,求lib文件
Windows环境VS2017,如何编译得到SQLite的sqlite3.lib文件?已知dll文件,求lib文件
400 0
|
.NET 数据库连接 数据库
asp开发记录(1)——[Microsoft][ODBC Microsoft Access Driver]行中有错误
 今天做东西的时候发现的此处错误,最后虽然解决了,但是自己还是要记录一下,方便以后查询!使用rs.Update()的时候,发现如下错误:[Microsoft][ODBC Microsoft Access Driver]行中有错误1、开始怀疑参数的问题,在进行数据更新的时候发生参数不符合数据库内的类型或其他的要求。
749 0
|
测试技术 C++ 数据库管理
SQLite部署-无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块
 近期刚使用SQLite,主要引用的是System.Data.SQLite.dll这个dll,在部署到测试环境时报无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
4406 0
解决方法:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
win7或win8 64位调试程序,出现这样的错误提示:未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序解决方法如下:方法一:“设置应用程序池默认属性”/“常规”/”启用32位应用程序”,设置为 true。
12511 0
|
SQL Oracle 关系型数据库
windows中PLSQL/Developer、Oracle InstantClient的安装与配置
由于完整的Oracle客户端对计算机的硬件要求比较高,所以一般不会在本地安装完整的Oracle客户端。
2499 0