在我的ASP.net网站上,我引用了Microsoft.SQLserver.SMO
。我将此引用复制到我的生产服务器上,并且无法加载Microsoft.SqlServer.Management.Sdk.Sfc
的错误。通过从
C:\Program files\Microsoft Sql Server\110\SDK\Assembilies
然而,我得到了相同的错误,但对Microsoft.SqlServer.SqlClrProvider
无处可寻。
我在哪里可以找到SqlClrProvider
dll?它适用于我的localhost所以它必须在某个地方。
答案 0 :(得分:20)
在您的开发计算机或安装了SQL Server的计算机上,Microsoft.SqlServer.SqlClrProvider.dll
文件位于GAC
。但是,如果不更改注册表,则无法复制此文件。
使用注册表编辑器转到HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Fusion
。添加名为DWORD
的新DisableCacheViewer
。将其值设为1
。
完成此更改后,您可以转到C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.SqlClrProvider\
以获取所需的dll。
要查看更详细的说明,请按以下链接之一:
答案 1 :(得分:4)
我想在PowerShell中创建一个嵌入式脚本,并偶然发现同样的问题。
问题是Microsoft.SqlServer.SqlClrProvider.dll
没有安装在SQL文件中,而是安装在Windows assembly
中。
Assembly
文件夹很特别:您无法使用Windows UI复制任何内容。
我只需要Microsoft.SqlServer.SqlClrProvider.dll
,以便我可以在我的脚本中加载它:
[System.Reflection.Assembly]::LoadFile($scriptPath+"dll\Microsoft.SqlServer.SqlClrProvider.dll") | out-null
要复制它,您可以执行以下操作:
c:\>cd c:\Windows\assembly
c:\Windows\assembly>dir /s Microsoft.SqlServer.SqlClrProvider.dll
# here you get the directory and the file
c:\Windows\assembly>copy c:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.SqlClrProvider\<version>\Microsoft.SqlServer.SqlClrProvider.dll c:\Users\Administrator\Desktop\
您希望在安装了SQLserver的计算机上执行此操作,否则您可能找不到它。
这只是一种解决方法。如果您需要在不同的环境中执行脚本,我想这不是最好的事情。
HTH
答案 2 :(得分:4)
将SqlClrProvider dll复制到sqlserver Binn目录在我的情况下没有帮助。
<强>原因:强>
这是因为在生产机器和目标机器上使用不同版本的SQLServer。
<强>解决方案:强>
确保使用与目标计算机上相同版本的SMO库。如果目标计算机上有SQLServer2008,则必须使用v10库,否则会出现此错误。
<强> MoreDetails:强>
我的目标机器上的SqlServer是版本2008(10),我在自己的机器上有SqlServer2014(12)。当我使用SMO库时,visualstudio添加了v12库( Microsoft.SqlServer.SMO,... ),但是smo只是一个使用SqlClrProvider的shell,它希望系统程序集上有相同版本的SqlClrProvider。这导致应用程序在目标计算机上崩溃,因为SqlClrProvider的v12不存在。通过使用v10 smo库我解决了问题
答案 3 :(得分:3)
在版本11中也有相同的问题。要安装正确的程序集,请执行以下步骤:
答案 4 :(得分:2)
使用Microsoft.Sqlerver.SMO
引用时无法解决我的问题。所以我改为使用System.Data.Sql.SqlDataSourceEnumerator
类来满足我所有的Sql功能需求。
答案 5 :(得分:2)
您需要做的第一件事是禁用GAC Shell扩展,允许您浏览GAC,以执行此操作:
禁用GAC Shell,允许您完全浏览程序集文件夹,现在我们可以从GAC中提取程序集并将其放入bin文件夹或客户端计算机上的dll位置。
答案 6 :(得分:1)
对于搜索此错误并到达此处的人,还有另一种可能性。进入服务,确保您的SQL Server进程可以运行。在我的计算机上,用户帐户的密码已更改。修改密码后,流程开始,我不再收到上述错误。