我正在尝试在Visual Studio 2015中构建一个SQL CLR项目,我正在调用一个以System.Runtime.Serialization.dll
为目标的wcf服务。我无法确定要定位的正确.NET版本以克服这个问题。
sql版本是:
name value
directory C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
version v4.0.30319
state CLR is initialized
我尝试针对.NET版本4构建CLR。
SQL拒绝安装System.Runtime.Serialization.dll
如果我针对.NET 3.5版构建,我会得到
Ms 6586,Level 16,State 1,Line 8 无法安装程序集“System.Runtime.Serialization”,因为现有策略将阻止其被使用。
我应该建立什么版本来克服这个问题?
答案 0 :(得分:1)
SQL Server 2012及更高版本使用CLR 4.0,而CLR 4.0又与.NET Framework 4.0及更高版本相关联。您不能在SQL Server 2012或更高版本中使用任何.NET 2.0,3.0或3.5库。
System.Runtime.Serialization 不在Supported .NET Framework Libraries列表中,因此您需要手动加载,UNSAFE
。但是,如果该DLL是混合模式而不是纯MSIL,则它不会加载,因为SQL Server的CLR主机仅适用于纯MSIL库。我发现最好只使用HttpWebRequest
并手动构建请求XML并手动解析响应XML。
过去, ServiceModel DLL是纯MSIL并且在SQL Server 2008 R2中工作(SQL Server 2005,2008和2008 R2与CLR 2.0绑定),但随后Microsoft更改了该DLL在CLR 4.0中是混合模式,并且在2008 R2中运行WebService SQLCLR工作的每个人都在升级到SQL Server 2012或更高版本时停止工作。使用HttpWebRequest
可以使用"已批准的"保证始终适用于.NET Framework升级的库。
这里已经有很多关于这些问题的问题。我将尝试找到一些并用其中一些更新。
另外,只是FYI,问题中显示的输出,似乎是执行结果:SELECT * FROM sys.dm_clr_properties;
。请注意"版本"显示,虽然通常被称为框架版本,实际上只是CLR版本,这两件事情是不一样的。