C# 在SQL Server中加载第三方clr dll

C# 在SQL Server中加载第三方clr dll,c#,sql-server,sqlclr,C#,Sql Server,Sqlclr,我在C#中编写了一个SQLCLR函数,它有一些依赖项(到npgsql.dll)。当它在过去没有任何依赖关系时,我可以在SQL Server中将其作为新程序集添加,而不会有任何问题,但现在我不能这样做 我得到这个错误: 味精10301,16级,状态1,第17行 程序集“Database1”引用了当前数据库中不存在的程序集“system.directoryservices,version=4.0.0,culture=neutral,publickeytoken=b03f5f7f11d50a3a.”。

我在C#中编写了一个SQLCLR函数,它有一些依赖项(到npgsql.dll)。当它在过去没有任何依赖关系时,我可以在SQL Server中将其作为新程序集添加,而不会有任何问题,但现在我不能这样做

我得到这个错误:

味精10301,16级,状态1,第17行
程序集“Database1”引用了当前数据库中不存在的程序集“system.directoryservices,version=4.0.0,culture=neutral,publickeytoken=b03f5f7f11d50a3a.”。SQL Server试图从引用程序集的来源位置定位并自动加载引用的程序集,但该操作失败(原因:2(系统找不到指定的文件)。请将引用的程序集加载到当前数据库中,然后重试您的请求

编辑: 这个问题不仅仅是“system.directoryservices”的问题,所以当我使用另一个npgsql.dll时,我会出现以下错误:

Msg 10301,16级,状态1,第20行程序集“Database1”引用 程序集'system.threading.tasks.extensions,版本=4.1.0.0, 区域性=中性,publickeytoken=CC7B13FFCD2DD51',这不是 存在于当前数据库中。SQL Server尝试查找和删除 从同一位置自动加载参照部件 引用程序集来自何处,但该操作已失败 (原因:2(系统找不到指定的文件。))。请装 将引用的程序集导入当前数据库,然后重试 请求


任何试图用开发人员命令提示符将这些库添加到GAC的尝试都无效。

这个问题在这里已经被问过好几次了。但是,与其将其列为副本,还不如先说:

在将DirectoryServicesDLL导入SQL Server(这是一个有一定风险的操作)之前,请确保您实际上不能以任何其他方式使用该功能。例如:

否则,请看这里:


这里的“修复”是为了启用可信任的
,这不是一个很好的选择,但它是加载不受支持的.NET Framework库的常用方法。我正在研究另一种方法,到目前为止,它看起来不错,并且不需要<代码>可信,但我需要做更多的测试,然后才能推荐它。一旦我有时间对其进行全面测试和记录,我将在稍后用该信息更新此信息。

其中哪部分不存在。。。。。。你不明白吗??您正在引用的此DLL不在SQL Server.NET环境中-如果需要,您必须先加载它并将其添加到SQL Server,然后再加载您自己的程序集。在正常情况下,像
System.DirectoryServices
这样的程序集是从GAC加载的。在SQL Server中,这些情况不适用。它有自己的加载程序集的逻辑,并忽略GAC,但允许的白名单程序集的小列表除外,其中不包括
System.DirectoryServices
。它(以及它的依赖项)在可用之前必须显式地添加到SQLServer的程序集集合中。显然,您已经拥有的程序集的早期版本没有引用它。感谢您的帮助@Jeroen Mostert。我试图在GAC中添加“System.DirectoryServices”,为此,我在.net路径中找到了这个dll,并使用开发人员命令提示符。但我又犯了同样的错误。是因为我的版本吗?如果是,我如何修复它?