SQL CLR - 从 2008 R2 迁移到 2012. [英] SQL CLR - Migration from 2008 R2 to 2012.

查看:29
本文介绍了SQL CLR - 从 2008 R2 迁移到 2012.的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 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 的引用".我不明白这个错误.不安全系统程序集的 2.0 版本存在于 DB mdf 文件本身中.为什么 SQL 寻找 4.0?我想我错过了SQL 支持 x 版本的 .NET 框架"的意思.

I have a bunch of SQL CLR assemblies on SQL 2008 R2. These assemblies were targeted with .Net Framework 3.5. Given SQL 2008 supported 2.0 .NET framework version, I am assuming SQL loaded the safe assemblies from System GAC and expected unsafe assemblies to be installed in SQL. My references to these unsafe assemblies are .NET version 2.0. Now when I restored this database to SQL 2012 my CLR code is failing with "reference to unsafe assembly version 4.0 not found". I did not understand this error. The 2.0 version of the unsafe system assembly exists in the DB mdf file itself. Why is SQL looking for 4.0? I think I am missing what "SQL supports x version of .NET framework" means.

推荐答案

我能够找到我所面临问题的根本原因.SQL 2012 支持 SQLCLR 的 .NET 框架 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

I was able to get to the root cause of the issue I was facing. SQL 2012 supports .NET framework version 4.0 for SQLCLR and hence loads all framework assemblies from 4.0 framework. Hence I needed to upgrade all my assemblies to use 4.0 framework assemblies. 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)从纯 .Net 程序集更改为混合模式程序集.SQL CLR 无法加载此类程序集.因此,所有用户定义的程序集取决于 2012 年之前的混合模式程序集在 2012 年不再工作:(最受打击的是以前工作的 SQL 和 WCF 集成在 2012 年完全中断,因为 WCF 依赖于 ServiceModel.更多在这里http://blogs.msdn.com/b/psssql/archive/2013/02/23/unable-to-register-net-framework-assembly-not-in-the-supported-list.aspx

But things didnt work for me even after that. It turns out in 4.0, .NET changed some framework assemblies like System.ServiceModel from Pure .Net assemblies to mixed mode assemblies. Such assemblies cannot be loaded by SQL CLR. So all user defined assemblies depending on mixed mode assemblies pre 2012 dont work anymore on 2012 :( Most badly hit are previously working SQL and WCF integrations completely breaking in 2012 sicne WCF depends on ServiceModel. More here http://blogs.msdn.com/b/psssql/archive/2013/02/23/unable-to-register-net-framework-assembly-not-in-the-supported-list.aspx

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

We ended up writing a simple Webservice wrapper over our WCF operation and writing a Webservice client in SQLCLR.

这篇关于SQL CLR - 从 2008 R2 迁移到 2012.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆