在SQL Server

时间:2017-10-11 13:33:04

标签: c# sql-server sqlclr

我在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并不起作用。

1 个答案:

答案 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的方法,但我需要做更多的测试才能推荐它。一旦我有时间对其进行全面测试和记录,我将在稍后用该信息更新。