5

我正在尝试在 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”,版本=0.0.0.0,文化=中性,publickeytoken=null。,当前数据库中不存在。SQL Server 试图从引用程序集所在的同一位置定位并自动加载引用程序集,但该操作失败(原因:2(系统找不到指定的文件。))。请将引用的程序集加载到当前数据库中,然后重试您的请求。

感谢您帮助解决此问题

4

3 回答 3

10

您可以将程序集添加到 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 权限级别设置为不安全。

于 2014-07-20T16:50:50.833 回答
6

SQL Server 中的程序集不能从 GAC 中引用程序集,除非它们在“祝福”列表中。该列表如下:

  • mscorlib.dll
  • 系统数据.dll
  • 系统.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 本身但不在上面列表中的程序集。

于 2012-08-24T09:38:24.630 回答
3

我知道很久以前就有人问过这个问题,但我想分享我的发现和解决方案,以便它可以帮助某人。

为了从 .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) 位置以使其正常工作。

注意:只有少数支持的程序集可以在此处找到。如果使用了指定程序集以外的任何东西,那么您将收到如下所示的警告。在我的示例中,当我尝试为 [System.Net.Http] 创建程序集时,我得到以下警告。

Microsoft .NET 框架程序集 'system.net.http,version=4.0.0.0,culture=neutral,publickeytoken=b03f5f7f11d50a3a,processorarchitecture=msil。' 您注册的内容未在 SQL Server 托管环境中进行全面测试,因此不受支持。将来,如果您升级或维修此程序集或 .NET Framework,您的 CLR 集成例程可能会停止工作。有关详细信息,请参阅 SQL Server 联机丛书。

希望这可以帮助。

于 2019-09-17T15:51:12.440 回答