C# 在SQL Server中创建自定义程序集在数据库中找不到引发程序集的错误
我正在尝试在SQL Server 2008 for CLR过程项目中为第三方dll(在.net中开发)创建程序集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
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;