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

在我的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所以它必须在某个地方。

在您的开发计算机或安装了SQL Server的计算机上, Microsoft.SqlServer.SqlClrProvider.dll文件位于您的GAC 。 但是,如果不更改注册表,则无法复制此文件。

使用注册表编辑器,转到HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Fusion 。 添加一个名为DisableCacheViewer的新DWORD 。 给它一个值1

完成此更改后,您可以转到C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.SqlClrProvider\以获取所需的dll。

要查看更详细的说明,请按以下链接之一:

  • 如何解决“SQLCLRPROVIDER未找到”,无需在客户机上安装SQL SERVER或需要部署项目
  • 无法加载文件或程序集Microsoft.SqlServer.SqlClrProvider

将SqlClrProvider dll复制到sqlserver Binn目录我的情况没有帮助。

原因:

这是因为在生产机器和目标机器上使用不同版本的SQLServer。

解:

确保使用与目标计算机上相同版本的SMO库。 如果目标计算机上有SQLServer2008,则必须使用v10库,否则会出现此错误。

更多细节:

我的目标机器上的SqlServer是版本2008(10),我在自己的机器上有SqlServer2014(12)。 当我使用SMO库时,visualstudio添加了v12库( Microsoft.SqlServer.SMO,… ),但是smo只是一个使用SqlClrProvider的shell,它希望在系统程序集上具有相同版本的SqlClrProvider。 这导致应用程序在目标计算机上崩溃,因为SqlClrProvider的v12不存在。 通过使用v10 smo库我解决了这个问题

我想在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\\Microsoft.SqlServer.SqlClrProvider.dll c:\Users\Administrator\Desktop\ 

你想在安装了SQLserver的机器上这样做,否则你可能找不到它。

这只是一种解决方法。 我想如果你需要在不同的环境中执行你的脚本,这不是最好的事情。

心连心

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

对于谷歌搜索这个错误,并到达这里,还有另一种可能性。 进入服务,确保您的SQL Server进程可以运行。 在我的计算机上,用户帐户的密码已更改。 一旦我修改了密码,该过程就开始了,我不再收到上述错误。

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

  • 打开“注册表”
  • 导航到HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Fusion
  • 添加名为DisableCacheViewer的新DWORD或32位DWORD,其Hex值为0x1或十进制值为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

参考

有相同的问题,但对于版本11.要安装正确的程序集,请执行以下步骤:

  • 检查预期的版本: https : //sqlserverbuilds.blogspot.com/ 。 版本11 => sql server 2012
  • 下载Microsoft的Web平台安装程序并进行安装
  • 搜索“sql server 2012”并安装以下一项或所有项:

在此处输入图像描述