无法在生产ASP.net网站上加载文件或程序集Microsoft.SqlServer.SqlClrProvider,它在哪里?

时间:2014-03-07 16:55:32

标签: c# asp.net .net sql-server

在我的ASP.net网站上,我引用了Microsoft.SQLserver.SMO。我将此引用复制到我的生产服务器上,并且无法加载Microsoft.SqlServer.Management.Sdk.Sfc的错误。通过从

复制dll来修复此错误
C:\Program files\Microsoft Sql Server\110\SDK\Assembilies

然而,我得到了相同的错误,但对Microsoft.SqlServer.SqlClrProvider无处可寻。

我在哪里可以找到SqlClrProvider dll?它适用于我的localhost所以它必须在某个地方。

7 个答案:

答案 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中也有相同的问题。要安装正确的程序集,请执行以下步骤:

enter image description here

答案 4 :(得分:2)

使用Microsoft.Sqlerver.SMO引用时无法解决我的问题。所以我改为使用System.Data.Sql.SqlDataSourceEnumerator类来满足我所有的Sql功能需求。

答案 5 :(得分:2)

您需要做的第一件事是禁用GAC Shell扩展,允许您浏览GAC,以执行此操作:

  • 打开“regedit”
  • 导航至 HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Fusion
  • 添加新的DWORD或32 位DWORD名为DisableCacheViewer,其Hex值为0x1或a 十进制值1

禁用GAC Shell,允许您完全浏览程序集文件夹,现在我们可以从GAC中提取程序集并将其放入bin文件夹或客户端计算机上的dll位置。

  • 转到C:\ Windows \ assembly \ GAC_MSIL \ Microsoft.SqlServer.SqlClrProvider \
  • 您可能会注意到此处有多个文件夹,这是针对您已安装的每个版本的SQL Server
  • 对于SQL 2012,它将是:\ 11.0.0.0__89845dcd8080cc91
  • 然后,您将找到文件Microsoft.SqlServer.SqlClrProvider.dll

Reference

答案 6 :(得分:1)

对于搜索此错误并到达此处的人,还有另一种可能性。进入服务,确保您的SQL Server进程可以运行。在我的计算机上,用户帐户的密码已更改。修改密码后,流程开始,我不再收到上述错误。