【问题标题】:Building SQL CLR project in Visual Studio 2015在 Visual Studio 2015 中构建 SQL CLR 项目
【发布时间】:2018-10-27 16:19:27
【问题描述】:

我正在尝试在 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 构建,我会得到

消息 6586,第 16 级,状态 1,第 8 行 无法安装程序集“System.Runtime.Serialization”,因为现有策略会阻止它被使用。

我应该构建哪个版本来克服这个问题?

【问题讨论】:

  • 首先...您确定需要 CLR 吗?它曾经风靡一时,但后来每个人都克服了它。
  • 您好,我会简单地将 wcf 服务部署到 IIS,但我不是老板!
  • 你运行的是什么 SQL Server 版本?
  • 嗨 Neil,Microsoft SQL Server 2014 - 12.0.2269.0 (X64) 2015 年 6 月 10 日 03:35:45 版权所有 (c) Windows NT 6.3 上的 Microsoft Corporation 标准版(64 位) (内部版本 16299:)(管理程序)
  • 实际上,我的问题是关于哪个 SQL 版本没有实际意义——因为,AFAIK,System.Runtime.Serialization.dll 是根本无法安装在 SQL Server 上的程序集之一。为什么数据库里有wcf服务,不能直接通过http或者sockets连接?

标签: sql-server sqlclr


【解决方案1】:

SQL Server 2012 及更高版本使用 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 绑定) .但随后,在 CLR 4.0 版中,微软向 ServiceModel 添加了一些依赖项。其中之一是新的 Microsoft.VisualBasic.Activities.Compiler 库(不是直接依赖,而是通过另一个,很可能是 Microsoft.Transactions.Bridge),它恰好包含非托管代码(无法加载到 SQL Server 中)。因此,在 2008 R2 中运行 WebService SQLCLR 的每个人在升级到 SQL Server 2012 或更高版本时都会停止工作。使用 HttpWebRequest 与“已批准”的库一起使用,该库保证在 .NET Framework 的升级中始终有效。

这里已经有很多关于这些问题的问题。我会尝试找到一些并用其中一些更新。

另外,仅供参考,问题中显示的输出似乎是执行结果:SELECT * FROM sys.dm_clr_properties;。请注意,显示的“版本”虽然通常称为框架版本,但实际上只是 CLR 版本,这两个东西不是一回事。

【讨论】:

  • 所罗门说了什么! :)
  • 您好,感谢您的回答,我会尽力听从您的建议。
猜你喜欢
  • 2017-01-15
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多