在数据库错误中找不到的SQL Server抛出程序集中创建自定义程序集

时间:2012-08-24 08:02:04

标签: c# sql-server clr

我正在尝试为SQL Server 2008中的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(系统找不到指定的文件。))。请加载   引用的程序集进入当前数据库并重试您的   请求。

感谢您帮助解决此问题

3 个答案:

答案 0 :(得分:7)

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

我已将System.Messaging.dll添加到SQL Server 2014,如下所示

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权限级别设置为UNSAFE。

答案 1 :(得分:4)

SQL Server中的程序集不能引用GAC中的程序集,除非它们位于“blessed”列表中。该清单如下:

  • 的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

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

答案 2 :(得分:1)

我知道这个问题已经被问了很久了,但是我想分享我的发现和解决方案,以便对别人有所帮助。

要从.NET Framework创建自定义程序集或本机程序集,您需要为数据库设置 TRUSTWORTHY ON

ALTER DATABASE [DATABASE NAME] SET TRUSTWORTHY ON;

此后,您可以执行以下脚本来创建程序集。在我的示例中,我正在尝试为“ System.Net.Http”创建程序集

CREATE ASSEMBLY [System.Net.Http]
FROM
   'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Net.Http.dll'
WITH PERMISSION_SET = UNSAFE;

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

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

  

Microsoft .NET Framework程序集'system.net.http,   版本= 4.0.0.0,文化=中性,publickeytoken = b03f5f7f11d50a3a,   处理器架构= msil。”您正在注册未经过全面测试   在SQL Server托管环境中,不受支持。在里面   将来,如果您升级或维修该程序集或.NET Framework,   您的CLR集成例程可能会停止工作。请参考SQL Server   在线图书以获取更多详细信息。

希望这会有所帮助。