在 SQL Server CLR 承载环境中未经测试的.NET Framework 程序集的支持策略

适用于: SQL Server 2012 EnterpriseSQL Server 2012 StandardSQL Server 2012 Developer

简介


本文介绍.NET Framework 公共语言运行时 (CLR) 中的未测试 Microsoft.NET Framework 程序集的支持策略-承载 Microsoft SQL Server 中的环境。

详细信息


测试的程序集和支持

注册的程序集引用中 SQL Server 的未经测试的.NET Framework 程序集时,您可能会收到以下警告消息︰

警告︰ 未完全测试承载的 SQL Server 环境中的 Microsoft.Net 框架程序集程序集名称注册。

该消息意味着.NET Framework 程序集未经过测试的 SQL Server CLR 托管的环境中。因此,该程序集不支持 SQL Server CLR 承载环境中。

低内存条件如下关键条件发生时,一个未经测试的.NET Framework 程序集可能会退出其宿主进程。可以在 SQL Server CLR 承载环境中使用程序集,需要您自担风险。但是,Microsoft SQL Server 客户支持服务 (CSS) 将无法帮助您使用并解决与不受支持的.NET Framework 程序集相关联的问题。如果 CSS 确定特定不受支持的程序集将导致 SQL Server 的问题,您可能需要停止使用该程序集。此外,您可能需要停止暂时在 CSS 用于诊断特定 SQL Server 问题,如有必要时才使用该程序集。

程序集注册

有两种类型的.NET 程序集︰ 纯和混合。纯的.NET 程序集包含仅 MSIL 指令。混合程序集包含非托管的计算机指令和 MSIL 指令。混合程序集通常被编译 c + + 编译器中使用"clr"开关,并还包含从本机 c + + 代码生成机器指令。

使用不受支持的列表中的.NET Framework 程序集时,您需要创建程序集语句用于注册程序集和在 SQL Server 数据库中引用的程序集。SQL Server 创建程序集语句允许只纯.NET Framework 程序集注册。如果该程序集或任何引用的程序集不是纯粹的.NET Framework 程序集 (并且,因此,是一个混合程序集),您会收到以下错误消息︰

Msg 6544,级别 16 状态 1,第 2 行

创建程序集程序集 < 程序集名称 > 失败,因为程序集 < 程序集名称 > 的格式不正确或不纯.NET 程序集。

无法验证 PE 标头/本机存根。

在这种情况下,不能使用与 SQL CLR 的.NET Framework 程序集,除非该程序集是在本文中介绍了受支持的列表中。此外,.NET Framework 程序集可以从纯程序集更改为混合程序集版本之间。如果您使用不受支持的列表中的程序集,您可能必须在一个版本的.NET Framework 中但不是在另一个程序集的工作的情况。此限制不适用于受支持的列表中的程序集因为这些程序集不需要注册使用语句创建程序集。

此外,您必须升级 Microsoft.NET Framework 后维护这些程序集。有关详细信息,请单击下面的文章编号,以转到 Microsoft 知识库中相应的文章:
949080时执行 CLR 例程或在 SQL Server 中使用程序集的错误消息:"主机存储区中的程序集在 GAC 中具有不同的签名比程序集。(从 HRESULT 异常︰ 0x80131050)"

在 SQL Server CLR 承载环境中受支持的程序集

在 SQL Server CLR 承载环境中支持以下.NET Framework 程序集︰
  • Microsoft.VisualBasic.dll
  • Mscorlib.dll
  • System.Data.dll
  • System.dll
  • System.Xml.dll
  • Microsoft.VisualC.dll
  • CustomMarshalers.dll
  • System.Security.dll
  • System.Web.Services.dll
  • System.Data.SqlXml.dll
  • System.Transactions.dll
  • System.Data.OracleClient.dll
  • System.Configuration.dll