C# 在SQL Server中创建自定义程序集在数据库中找不到引发程序集的错误

C# 在SQL Server中创建自定义程序集在数据库中找不到引发程序集的错误,c#,sql-server,clr,C#,Sql Server,Clr,我正在尝试在SQL Server 2008 for CLR过程项目中为第三方dll(在.net中开发)创建程序集 create assembly [`XXXX.XXX.XXX.dll`] authorization dbo from 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\XXXX.XXX.XXX.dll' with permission_set = unsafe 但我在执行上述脚本时遇到此错误: 程序集“XXX.XXX.XXX

我正在尝试在SQL Server 2008 for CLR过程项目中为第三方dll(在.net中开发)创建程序集

create assembly [`XXXX.XXX.XXX.dll`]  
authorization dbo  
from 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\XXXX.XXX.XXX.dll'  
with permission_set = unsafe
但我在执行上述脚本时遇到此错误:

程序集“XXX.XXX.XXX.XXX”引用程序集“XXX.XXX.XXXXX”, version=0.0.0.0,culture=neutral,publickeytoken=null',这不是 存在于当前数据库中。SQL Server尝试查找和删除 从同一位置自动加载参照部件 引用程序集来自何处,但该操作已失败 (原因:2(系统找不到指定的文件。))。请装 将引用的程序集导入当前数据库,然后重试 请求


感谢您帮助解决此问题

SQL Server中的程序集无法引用GAC中的程序集,除非它们位于“受祝福”列表中。该清单如下:

  • Mscorlib.dll
  • System.Data.dll
  • System.dll
  • System.Xml.dll
  • System.Security.dll
  • System.Web.Services.dll
  • System.Data.SqlXml.dll
  • System.Transactions.dll
  • System.Configuration.dll
  • Microsoft.VisualBasic.dll
  • Microsoft.VisualC.dll
  • CustomMarshalers.dll
  • System.Data.OracleClient.dll

任何其他程序集都需要在SQL Server中使用
CREATE ASSEMBLY
语法创建-即使是来自.NET Framework本身但不在上面列表中的程序集。

您可以将程序集添加到CLR使用的数据库中

我在SQL Server 2014中添加了System.Messaging.dll示例,如下所示

CREATE ASSEMBLY [System.Messaging]
FROM 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Messaging.dll'
WITH PERMISSION_SET = UNSAFE;
GO 
它将添加链接到该程序集的必要的其他引用程序集。之后,我添加了Newtonsoft.Json.dll,如下所示:

CREATE ASSEMBLY [Newtonsoft.Json]
FROM 'C:\Users\RiaanDL\Downloads\Json60r3\Bin\Net45\Newtonsoft.Json.dll'
WITH PERMISSION_SET = UNSAFE;
GO

请记住在项目配置中将您的SQLCLR权限级别设置为不安全。

我知道这个问题很久以前就被问过了,但我想与大家分享我的发现和解决方案,以便它可以帮助别人

为了从.NET Framework创建程序集(无论是自定义程序集还是本机程序集),您需要为数据库设置可信

ALTER DATABASE [DATABASE NAME] SET TRUSTWORTHY ON;
在此之后,您可以执行以下脚本来创建程序集。在我的示例中,我尝试为“System.Net.Http”创建程序集

对于您的情况,您需要正确地指出您的客户程序集(dll)位置,以使其正常工作

注意:只能找到少数受支持的程序集。如果使用的不是指定的程序集,则会出现如下所示的警告。在我的示例中,当我尝试为[System.Net.Http]创建程序集时,得到了以下警告

Microsoft.NET Framework程序集的system.NET.http, 版本=4.0.0.0,区域性=中性,publickeytoken=b03f5f7f11d50a3a, processorarchitecture=msil。'您正在注册的未经完全测试 在SQL Server托管环境中,并且不受支持。在 将来,如果您升级或服务此程序集或.NET Framework, 您的CLR集成例程可能会停止工作。请参考SQL Server 更多详情,请在线阅读


希望这有帮助。

这是sql server上的路径,对吗?不在您的客户端上?我已将客户端dll粘贴到“C:\Windows\Microsoft.NET\Framework\”中。您所指的sql server路径是什么?非常感谢。这部分应该由gold编写(SQLCLR权限级别在项目配置中不安全)
CREATE ASSEMBLY [System.Net.Http]
FROM
   'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Net.Http.dll'
WITH PERMISSION_SET = UNSAFE;