无法加载文件或程序集 microsoft.sqlserver.sqlclrprovider 13.100.0.0
Could not load file or assembly microsoft.sqlserver.sqlclrprovider 13.100.0.0
我 运行 我的 Winforms 应用程序使用 SQL 服务器程序集
Microsoft.SqlServer.ConnectionInfo (13.100.0.0)
Microsoft.SqlServer.SMO(13.100.0.0)
在同一台机器上安装了 SSMS 2016(8 月)。
这里也安装了 SQL 2014 Dev Edition。
当我 运行 我的应用程序出现错误时:
сonnection = new ServerConnection(instanceName);
------------
Could not load file or assembly ‘microsoft.sqlserver.sqlclrprovider version=13.100.0.0′
我检查过:GAC 包含一些程序集 11、12、13.0.0.0,但没有 13.100.0.0。
应用程序已从以下位置获取引用程序集:
C:\Program Files (x86)\Microsoft SQL Server0\DTS\Tasks
Microsoft.SqlServer.ConnectionInfo (13.100.0.0)
Microsoft.SqlServer.SMO(13.100.0.0)
我的 OS 是 Windows 7,我认为所有 13.100.0.0 都是由 SSMS 安装程序安装的。
如何解决这个问题呢?我在哪里可以找到程序集
microsoft.sqlserver.sqlclrprovider13.100.0.0?
Microsoft.SqlSever.SqlClrProvider 可以通过 运行 以下 MSI 安装:
ENU\x64\SQLSysClrTypes.msi
ENU\x64\SharedManagementObjects.msi
可从以下 Microsoft 下载中获得 link:
https://www.microsoft.com/en-us/download/details.aspx?id=52676
link 提供了 MSI 列表。您必须浏览列表才能找到上面的项目。
首先安装 SQLSysClrTypes.msi,然后安装 SharedManagmentObjects.msi。
实际上 Microsoft.SqlSever.SqlClrProvider.dll 将安装到您的 GAC 中。其余相关程序集将安装在 C:\Program Files\Microsoft SQL Server0\
事实证明,在我的例子中,这只是一个添加所有具有相同版本号的 DLL 作为引用的问题。这必须手动完成。它们都位于 C:\Program Files (x86)\Microsoft SQL Server0\DTS\Tasks\(对于 Microsoft.SqlServer.Smo.dll)或 C:\Program Files (x86)\Microsoft SQL Server0\Tools\Binn\ManagementStudio\在Microsoft.SqlServer.SqlClrProvider.dll的情况下。如果您查看这两个文件夹中所有 related/required DLL 的属性,它们都显示版本 13.0.15700。但是一旦你浏览到每一个,并将其作为参考,VS2015 中的参考属性都说版本 13.100.0.0???????那个怎么样!一切正常。
客户端应用程序不应使用 Program Files 文件夹中的程序集,除非它们来自特定的 SDK 文件夹(例如 "C:\Program Files (x86)\Microsoft SQL Server0\SDK")
您看到的 13.100.* 版本的程序集目前仅供 Microsoft 工具使用,因此并未将所有需要的依赖项放在同一位置。 DTS 文件夹尤其只有 SMO 程序集的一个子集,因为该代码不需要诸如 SqlClrProvider 之类的东西。
请使用 SDK 文件夹或 SharedManagementObjects.msi 中的程序集作为您的应用程序的参考。
-查尔斯·加格农 (chgagnon@microsoft.com)
我遇到了同样的问题。使用更新的 SSMS,主 SMO 现在安装在 "C:\Program Files (x86)\Microsoft SQL Server0\DTS\Tasks"
中,VS 中的版本为 13.100.0.0(Microsoft.SqlServer.Smo.dll 文件具有 13.0.15700.28 版本)但没有引用 Microsoft.SqlServer.SqlClrProvider.dll在 GAC 中。当我使用 SSMS 提供的那个时,我的代码中出现了一个异常。
问题是 SSMS 的安装程序将这些私有 SMO 的引用添加到 Visual Studio 的引用列表中。 Charles Gagnon 给了我一个解决方法(使用 HintPath),我在我的 .csproj
文件中实现了。
如果有人对这种情况有 运行 的不满,希望这会有所帮助。 None 关于此 post 的建议答案(也不是链接到 MS Connect 站点的答案,也不是针对其他版本 SQL 的任何其他解决方案,也不是针对其他不相关的 DLL 文件的修复, 也不...) 解决了我的问题。从 GAC 添加对 DLL 的引用导致另一个错误 Access Denied。
通过对我的应用程序的 debug/bin 文件夹进行大量故障排除并比较 SMO 和 SqlClrProvider DLL 文件的版本,我注意到两件事。 A) 详细错误 message/stack 跟踪显示对 一个单独的 dll 的引用,这显然是 SMO 的依赖项,该 DLL 是 Microsoft.SqlServer.ConnectionInfo.dll。 B) 我注意到当项目编译时,ConnectionInfo.dll 的 date/version 显示它 was not 当 DLLs SMO 和 Common DLL 引用被修改时被替换.由于这似乎是一个依赖关系,所以这没有意义。
因此,我添加了对三个 dll 的引用。 Microsoft.SqlServer.Smo.dll、Microsoft.SqlServer.SqlClrProvider.dll 和 Microsoft.SqlServer.ConnectionInfo.dll。请注意,我从 C:\Program Files (x86)\Microsoft SQL Server0\Tools\Binn\ManagementStudio 中提取了这些引用。这不是 MS 推荐的位置(见上面的答案),但坦率地说,在这一点上我不在乎。成功了。
底线:尝试将 connectioninfo.dll 文件添加到您的参考文献中。
不能 100% 确定是否需要 Copy Local = True,但 属性 已为所有 3 个设置。
Visual Studio 2013 和 SQL Server 2014(如果相关)。
编辑:运行 进入另一个与此混乱相关的问题。我们还需要包括 SqlServer.Management.sdk.sfc.dll 和 SqlServer.SqlEnum.dll,因为它们与其中一些调用使用的枚举有关。这使总引用达到 5 以修复此错误。希望这对某人有所帮助!
我有类似的问题,我在 Visual Studio 中的异常要求:
Microsoft.SqlServer.Diagnostics.STrace,版本=13.0.0.0
在项目参考中,我有一个版本为 13.0.1601 的 DLL...并且版本(通过 VS 浏览)为 13.100.0.0,因此我将项目参考中的 DLL 替换为版本 13.0.4424。 .. 版本(由 VS 浏览)为 13.0.0.0
一切如期进行。
这里有些地方产生了一些问题。
- 为什么 DLL 有两个版本?
- 为什么版本为 13.0.1601 的 dll 有版本 13.100.0.0(由 VS 浏览)而另一个版本较新 13.0.4424版本低13.0.0.0(VS浏览)?
明确答案:
客户端应用程序不应使用 Program Files 文件夹中的程序集,除非它们来自特定的 SDK 文件夹(例如“C:\Program Files (x86)\Microsoft SQL Server0\SDK ”)
您看到的 13.100.* 版本的程序集目前仅供 Microsoft 工具使用,因此并未将所有需要的依赖项放在同一位置。 DTS 文件夹尤其只有 SMO 程序集的一个子集,因为该代码不需要诸如 SqlClrProvider 之类的东西。
请使用 SDK 文件夹或 SharedManagementObjects.msi 中的程序集作为您的应用程序的参考。
-查尔斯·加格农 (chgagnon@microsoft.com)
我使用了 nuget 非官方包,this one。
它运行良好,不需要在生产服务器上单独安装任何东西。
我 运行 我的 Winforms 应用程序使用 SQL 服务器程序集 Microsoft.SqlServer.ConnectionInfo (13.100.0.0) Microsoft.SqlServer.SMO(13.100.0.0)
在同一台机器上安装了 SSMS 2016(8 月)。 这里也安装了 SQL 2014 Dev Edition。
当我 运行 我的应用程序出现错误时:
сonnection = new ServerConnection(instanceName);
------------
Could not load file or assembly ‘microsoft.sqlserver.sqlclrprovider version=13.100.0.0′
我检查过:GAC 包含一些程序集 11、12、13.0.0.0,但没有 13.100.0.0。
应用程序已从以下位置获取引用程序集: C:\Program Files (x86)\Microsoft SQL Server0\DTS\Tasks
Microsoft.SqlServer.ConnectionInfo (13.100.0.0)
Microsoft.SqlServer.SMO(13.100.0.0)
我的 OS 是 Windows 7,我认为所有 13.100.0.0 都是由 SSMS 安装程序安装的。 如何解决这个问题呢?我在哪里可以找到程序集 microsoft.sqlserver.sqlclrprovider13.100.0.0?
Microsoft.SqlSever.SqlClrProvider 可以通过 运行 以下 MSI 安装:
ENU\x64\SQLSysClrTypes.msi
ENU\x64\SharedManagementObjects.msi
可从以下 Microsoft 下载中获得 link: https://www.microsoft.com/en-us/download/details.aspx?id=52676
link 提供了 MSI 列表。您必须浏览列表才能找到上面的项目。
首先安装 SQLSysClrTypes.msi,然后安装 SharedManagmentObjects.msi。
实际上 Microsoft.SqlSever.SqlClrProvider.dll 将安装到您的 GAC 中。其余相关程序集将安装在 C:\Program Files\Microsoft SQL Server0\
事实证明,在我的例子中,这只是一个添加所有具有相同版本号的 DLL 作为引用的问题。这必须手动完成。它们都位于 C:\Program Files (x86)\Microsoft SQL Server0\DTS\Tasks\(对于 Microsoft.SqlServer.Smo.dll)或 C:\Program Files (x86)\Microsoft SQL Server0\Tools\Binn\ManagementStudio\在Microsoft.SqlServer.SqlClrProvider.dll的情况下。如果您查看这两个文件夹中所有 related/required DLL 的属性,它们都显示版本 13.0.15700。但是一旦你浏览到每一个,并将其作为参考,VS2015 中的参考属性都说版本 13.100.0.0???????那个怎么样!一切正常。
客户端应用程序不应使用 Program Files 文件夹中的程序集,除非它们来自特定的 SDK 文件夹(例如 "C:\Program Files (x86)\Microsoft SQL Server0\SDK")
您看到的 13.100.* 版本的程序集目前仅供 Microsoft 工具使用,因此并未将所有需要的依赖项放在同一位置。 DTS 文件夹尤其只有 SMO 程序集的一个子集,因为该代码不需要诸如 SqlClrProvider 之类的东西。
请使用 SDK 文件夹或 SharedManagementObjects.msi 中的程序集作为您的应用程序的参考。
-查尔斯·加格农 (chgagnon@microsoft.com)
我遇到了同样的问题。使用更新的 SSMS,主 SMO 现在安装在 "C:\Program Files (x86)\Microsoft SQL Server0\DTS\Tasks"
中,VS 中的版本为 13.100.0.0(Microsoft.SqlServer.Smo.dll 文件具有 13.0.15700.28 版本)但没有引用 Microsoft.SqlServer.SqlClrProvider.dll在 GAC 中。当我使用 SSMS 提供的那个时,我的代码中出现了一个异常。
问题是 SSMS 的安装程序将这些私有 SMO 的引用添加到 Visual Studio 的引用列表中。 Charles Gagnon 给了我一个解决方法(使用 HintPath),我在我的 .csproj
文件中实现了。
如果有人对这种情况有 运行 的不满,希望这会有所帮助。 None 关于此 post 的建议答案(也不是链接到 MS Connect 站点的答案,也不是针对其他版本 SQL 的任何其他解决方案,也不是针对其他不相关的 DLL 文件的修复, 也不...) 解决了我的问题。从 GAC 添加对 DLL 的引用导致另一个错误 Access Denied。
通过对我的应用程序的 debug/bin 文件夹进行大量故障排除并比较 SMO 和 SqlClrProvider DLL 文件的版本,我注意到两件事。 A) 详细错误 message/stack 跟踪显示对 一个单独的 dll 的引用,这显然是 SMO 的依赖项,该 DLL 是 Microsoft.SqlServer.ConnectionInfo.dll。 B) 我注意到当项目编译时,ConnectionInfo.dll 的 date/version 显示它 was not 当 DLLs SMO 和 Common DLL 引用被修改时被替换.由于这似乎是一个依赖关系,所以这没有意义。
因此,我添加了对三个 dll 的引用。 Microsoft.SqlServer.Smo.dll、Microsoft.SqlServer.SqlClrProvider.dll 和 Microsoft.SqlServer.ConnectionInfo.dll。请注意,我从 C:\Program Files (x86)\Microsoft SQL Server0\Tools\Binn\ManagementStudio 中提取了这些引用。这不是 MS 推荐的位置(见上面的答案),但坦率地说,在这一点上我不在乎。成功了。
底线:尝试将 connectioninfo.dll 文件添加到您的参考文献中。
不能 100% 确定是否需要 Copy Local = True,但 属性 已为所有 3 个设置。
Visual Studio 2013 和 SQL Server 2014(如果相关)。
编辑:运行 进入另一个与此混乱相关的问题。我们还需要包括 SqlServer.Management.sdk.sfc.dll 和 SqlServer.SqlEnum.dll,因为它们与其中一些调用使用的枚举有关。这使总引用达到 5 以修复此错误。希望这对某人有所帮助!
我有类似的问题,我在 Visual Studio 中的异常要求: Microsoft.SqlServer.Diagnostics.STrace,版本=13.0.0.0
在项目参考中,我有一个版本为 13.0.1601 的 DLL...并且版本(通过 VS 浏览)为 13.100.0.0,因此我将项目参考中的 DLL 替换为版本 13.0.4424。 .. 版本(由 VS 浏览)为 13.0.0.0
一切如期进行。
这里有些地方产生了一些问题。
- 为什么 DLL 有两个版本?
- 为什么版本为 13.0.1601 的 dll 有版本 13.100.0.0(由 VS 浏览)而另一个版本较新 13.0.4424版本低13.0.0.0(VS浏览)?
明确答案:
客户端应用程序不应使用 Program Files 文件夹中的程序集,除非它们来自特定的 SDK 文件夹(例如“C:\Program Files (x86)\Microsoft SQL Server0\SDK ”)
您看到的 13.100.* 版本的程序集目前仅供 Microsoft 工具使用,因此并未将所有需要的依赖项放在同一位置。 DTS 文件夹尤其只有 SMO 程序集的一个子集,因为该代码不需要诸如 SqlClrProvider 之类的东西。
请使用 SDK 文件夹或 SharedManagementObjects.msi 中的程序集作为您的应用程序的参考。
-查尔斯·加格农 (chgagnon@microsoft.com)
我使用了 nuget 非官方包,this one。
它运行良好,不需要在生产服务器上单独安装任何东西。