Sql Server CLR加载程序集失败

Kla*_*ark 12 c# sql-server clr assemblies sqlclr

我正在尝试部署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(系统找不到指定的文件.)).请将引用的程序集加载到当前数据库中,然后重试您的请求.

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

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

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

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

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

任何想法/解决方案?

Dar*_*nMB 15

根据文档,可以引用任何.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 
Run Code Online (Sandbox Code Playgroud)

系统将尝试自动注册从属程序集,但只能从与您尝试注册的文件相同的目录中执行此操作.在我的情况下,它还在数据库中注册了以下程序集,以便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
Run Code Online (Sandbox Code Playgroud)

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

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


Kan*_*ane 4

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

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