我在C#中编写了一个SQL CLR函数,它具有一些依赖性(对于npgsql.dll)。如果它在过去没有任何依赖,我可以在SQL Server中将其添加为新的程序集而没有任何问题 - 但现在我无法做到。
我收到此错误:
Msg 10301,Level 16,State 1,Line 17
汇编'数据库1'引用程序集&system;系统目录服务,版本= 4.0.0.0,culture = neutral,publickeytoken = b03f5f7f11d50a3a。',这在当前数据库中不存在。 SQL Server尝试从引用程序集来自的相同位置定位并自动加载引用的程序集,但该操作失败(原因:2(系统找不到指定的文件。))。请将引用的程序集加载到当前数据库中,然后重试您的请求。
编辑: 这个问题不只是与system.directoryservices',所以当我使用另一个npgsql.dll时,我得到了以下错误:
Msg 10301,Level 16,State 1,Line 20 Assembly' Database1'引用 assembly&system; .thread.tasks.extensions,version = 4.1.0.0, culture = neutral,publickeytoken = cc7b13ffcd2ddd51。',不是 存在于当前数据库中。 SQL Server试图找到和 从同一位置自动加载引用的程序集 引用程序集来自哪里,但该操作失败了 (原因:2(系统找不到指定的文件。))。请加载 引用的程序集进入当前数据库并重试您的 请求。
并且尝试使用开发人员命令提示符将这些库添加到GAC并不起作用。
答案 0 :(得分:1)
这个问题已在此处多次询问和回答。但是,不仅仅是将其列为重复内容,还需要首先说明一些事情:
在将 DirectoryServices DLL导入SQL Server(具有一定风险的操作)之前,请确保您实际上无法以任何其他方式执行该功能。例如:
C# clr udf for Active Directory group membership
否则,请看这里:
How to register System.DirectoryServices for use in SQL CLR User Functions?
"修复"要启用TRUSTWORTHY
,这在任何方面都不是一个很好的选择,但这是获取不受支持的.NET Framework库的常用方法。我正在研究另一种迄今为止看起来很好并且不需要TRUSTWORTHY
的方法,但我需要做更多的测试才能推荐它。一旦我有时间对其进行全面测试和记录,我将在稍后用该信息更新。