我正在尝试为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(系统找不到指定的文件。))。请加载 引用的程序集进入当前数据库并重试您的 请求。
感谢您帮助解决此问题
答案 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”列表中。该清单如下:
需要使用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 在线图书以获取更多详细信息。
希望这会有所帮助。