.net - SQL CLR - 从 2008 R2 迁移到 2012。

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

最佳答案

我能够找到我所面临问题的根本原因。 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

但即使在那之后,事情对我也不起作用。事实证明,在 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

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

关于.net - SQL CLR - 从 2008 R2 迁移到 2012。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17567028/

相关文章:

c# - 如何获得任务优先级

sql-server - 选择具有最小值的列的行

c# - SSRS 2016自定义程序集部署不起作用

c# - 使用来自不同程序集的自定义 UserControl 时出现 "The member is not recognized or is not accessible"

c# - 通过 C# 中的参数在 SqlCommand 中的字符串列表

c# - 如何在不添加对调用项目的引用的情况下通过类库正确解析 DLL 引用

asp.net - Azure站点: Compiler Error Message: CS1056: Unexpected character '$'

.net - 将 .net 对象的类更改为子类

.net - 将 Crystal 报表导出为 PDF 会导致数据丢失

sql-server - 如何在 SQL-Server 中创建一个只能访问一张表并且只能插入行的用户