2011-07-05 82 views
12

我想部署一个CLR TVF(表值函数)。在代码中,我使用JavaScriptSerializer来解析一些JSON字符串,所以我引用了System.Web.Extensions dll,并且我的问题从那里开始。SQL Server CLR加载程序集失败

项目的基础很好,但是当我尝试注册我收到以下错误的dll:

Assembly 'my_assembly_name' references assembly 'system.web.extensions, version=4.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: 2(The system cannot find the file specified.)). Please load the referenced assembly into the current database and retry your request.

我引用System.Web.Extensions程序从:

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

我可以设置副本加载以真实或手动方式复制程序集,但随后引用错误会变得更深 -

Assembly 'my_assembly_name' references assembly 'system.servicemodel.activation, version=4.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: 2(The system cannot find the file specified.)). Please load the referenced assembly into the current database and retry your request.

E事情工作正常,直到我引用Web.Extensions.dll。目标框架是.NET 4.

任何想法/解决方案?

+0

SQL Server计算机上是否安装了.NET 4 Framework? –

+0

是的,正如我所说的,当System.Web.Extensions.dll没有被引用时,一切正常。 – Klark

回答

3

.NET Framework CLR与SQL Server 2005/2008的可悲集成仅仅是该框架的有限子集,而System.Web.Extensions似乎并不是受支持的程序集/名称空间。

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

+0

真的很伤心。谢谢,我为JSON找到了一个不同的解析器,这样就解决了这个问题。 – Klark

+0

出于兴趣什么是解析器,是Json.Net? – Kane

+0

nope,我使用了System.Web.Extensions.dll中的JavaScriptSerializer。 – Klark

14

Acording到文档中,任何.NET组件可以被引用,但每个相关组件也必须在数据库中(在“可编程性可见注册 - SQL Server管理器“中的”Assemblies“节点)。 一旦SQL Server数据库具有可用的相关程序集,它们将出现在Visual Studio的“添加引用对话框”窗口中。

以下SQL代码的工作原理。我需要System.Web.dll程序集 (你需要正确的版本我的SQL 2005是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并从该文件夹中注册,可以更轻松地完成操作。

相关问题