在Visual Studio 2015中构建SQL CLR项目

时间:2018-05-17 11:50:08

标签: sql-server sqlclr

我正在尝试在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”,因为现有策略将阻止其被使用。

我应该建立什么版本来克服这个问题?

1 个答案:

答案 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版本,这两件事情是不一样的。