SQL CLR - 从2008 R2迁移到2012年。

时间:2013-07-10 09:26:59

标签: .net sql-server .net-assembly sqlclr

我在SQL 2008 R2上有一堆SQL CLR程序集。这些程序集以.Net Framework 3.5为目标。鉴于SQL 2008支持的2.0 .NET框架版本,我假设SQL从System GAC加载了安全程序集,并且期望在SQL中安装不安全的程序集。我对这些不安全程序集的引用是.NET 2.0版。现在,当我将此数据库恢复到SQL 2012时,我的CLR代码失败并显示“未找到不安全程序集版本4.0的引用”。我不明白这个错误。 DB mdf文件本身存在2.0版本的不安全系统程序集。为什么SQL要寻找4.0?我想我错过了“SQL支持x版.NET框架”的含义。

1 个答案:

答案 0 :(得分:3)

我能够找到我面临的问题的根本原因。 SQL 2012支持用于SQLCLR的.NET framework 4.0版,因此从4.0框架加载所有框架程序集。因此,我需要升级所有程序集以使用4.0框架程序集。 http://blogs.msdn.com/b/dohollan/archive/2012/04/20/sql-server-2012-sqlclr-net-framework-version.aspx?CommentPosted=true#commentmessage

但即便如此,事情对我也没有用。结果在4.0中,.NET将一些框架组件(如System.ServiceModel)从Pure .Net程序集更改为混合模式程序集。 SQL CLR无法加载此类程序集。所以所有用户定义的程序集取决于2012年之前的混合模式程序集在2012年不再工作:( 最受打击的是以前工作的SQL和WCF集成在2012年彻底打破了sicne WCF依赖于ServiceModel。 更多http://blogs.msdn.com/b/psssql/archive/2013/02/23/unable-to-register-net-framework-assembly-not-in-the-supported-list.aspx

我们最终在WCF操作上编写了一个简单的Webservice包装器,并在SQLCLR中编写了Webservice客户端。