无法在生产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”并安装以下一项或所有项:
- 打印可滚动的窗体。
- .net中有128或256位双等级吗?
- WPF DataGrid的性能问题
- 当从针对任何CPU的C#项目调用时,为什么此代码会抛出System.AccessViolationException?
- 当StartInfo.RedirectStandardInput设置为true时,为什么StandardOutput.Read()会阻塞?
- 为什么我需要Singleton设计模式?
- xml序列化一起指定xmlelement和xmlattribute
- 如何以编程方式安全地关闭Google Chrome
- System.Web.Script.Serialization.JavaScriptSerializer或System.Runtime.Serialization.Json.DataContractJsonSerializer?