Sql Server CLR加载程序集失败

本文关键字:程序集 失败 加载 CLR Server Sql | 更新日期: 2023-09-27 18:01:27

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

项目构建良好,但当我尝试注册dll时,我收到以下错误:

程序集'my_assembly_name'引用system.web.extensions大会",version = 4.0.0.0、文化=中立,都31 bf3856ad364e35。’,哪些是当前不存在的数据库。SQL Server试图定位并自动加载来自相同的引用程序集参考装配来的位置但是那次行动失败了(原因:2)系统找不到文件指定。))。请载入参考汇编成电流数据库并重试请求。

我引用system.web.extensions from:

C:'Program Files (x86)'Reference微软组件' ' Framework.NETFramework ' v4.0 ' System.Web.Extensions.dll

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

程序集'my_assembly_name'引用组装"system.servicemodel.activation,version = 4.0.0.0、文化=中立,都31 bf3856ad364e35。’,哪些是当前不存在的数据库。SQL Server试图定位并自动加载来自相同的引用程序集参考装配来的位置但是那次行动失败了(原因:2)系统找不到文件指定。))。请载入参考汇编成电流数据库并重试请求。

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

任何想法/解决方案?

Sql Server CLR加载程序集失败

根据文档,任何。net程序集都可以被引用,但每个依赖程序集也必须在数据库中注册(在SQL Server管理器中的"可编程性-程序集"节点中可见)。一旦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框架,所以我不能为你测试导入system . web . extensions .dll,但它可能需要从另一个文件夹的其他程序集注册,因为它是一个4.0程序集,它可能会引用一些2.0或3.5程序集在不同的文件夹。

我怀疑你最终会导入一个相当大的程序集列表来让它工作,但这绝对是可能的。如果将所有依赖的dll放在一个文件夹中,并从那里注册,操作可能会更容易完成。

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

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