Sql Server CLR加载程序集失败

我正在尝试部署CLR TVF(表值函数)。 在代码中我使用JavaScriptSerializer来解析一些JSON字符串,所以我引用了System.Web.Extensions dll,我的问题从那里开始。

项目构建正常,但当我尝试注册该DLL时,我收到以下错误:

程序集“my_assembly_name”引用程序集“system.web.extensions,version = 4.0.0.0,culture = neutral,publickeytoken = 31bf3856ad364e35。”,这在当前数据库中不存在。 SQL Server尝试从引用程序集来自的相同位置定位并自动加载引用的程序集,但该操作失败(原因:2(系统找不到指定的文件。))。 请将引用的程序集加载到当前数据库中,然后重试您的请求。

我从以下url引用了system.web.extensions:

C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Web.Extensions.dll

我可以将copy load设置为true或手动复制程序集,但随后引用错误会更深入 –

程序集“my_assembly_name”引用程序集“system.servicemodel.activation,version = 4.0.0.0,culture = neutral,publickeytoken = 31bf3856ad364e35。”,它在当前数据库中不存在。 SQL Server尝试从引用程序集来自的相同位置定位并自动加载引用的程序集,但该操作失败(原因:2(系统找不到指定的文件。))。 请将引用的程序集加载到当前数据库中,然后重试您的请求。

一切正常,直到我引用Web.Extensions.dll。 目标框架是.NET 4。

任何想法/解决方案?

遗憾的是,.NET Framework CLR与SQL Server 2005/2008的集成只是框架的一个有限子集,而System.Web.Extensions似乎不是受支持的程序集/命名空间。

有关受支持程序集的完整列表,请查看MSDN: http : //msdn.microsoft.com/en-us/library/ms403279.aspx

根据文档,可以引用任何.NET程序集,但每个依赖程序集也必须在数据库中注册(在SQL Server Manager的“可编程性 – 程序集”节点中可见)。 一旦SQL Server数据库具有可用的依赖程序集,它们将出现在Visual Studio的“添加引用”对话框窗口中。

下面的SQL代码有效。 我需要System.Web.dll程序集(你需要正确的版本我的2005 SQL是64位)

CREATE ASSEMBLY [System.Web] AUTHORIZATION dbo FROM 'c:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\System.web.dll' WITH PERMISSION_SET = UNSAFE 

系统将尝试自动注册从属程序集,但只能从与您尝试注册的文件相同的目录中执行此操作。 在我的情况下,它还在数据库中注册了以下程序集,以便System.Web正常运行…

 System.Configuration.Install System.Design System.DirectoryServices System.DirectoryServices.Protocols System.Drawing System.Drawing.Design System.EnterpriseServices System.Runtime.Remoting System.Runtime.Serialization.Formatters.Soap System.ServiceProcess System.Web.RegularExpressions System.Windows.Forms 

我的系统使用的是3.5 Framework,因此我无法为您测试导入System.Web.Extensions.dll,但可能需要从其他文件夹中注册其他程序集,并且由于它是4.0程序集,因此它可能会引用一些2.0或3.5程序集。在另一个文件夹中。

我怀疑你最终会导入一个相当大的程序集列表以使其工作,但绝对可以这样做。 通过在其中包含一个包含所有相关dll的文件夹并从那里注册,可以更轻松地完成操作。