SQL Server CLR 托管环境中的未测试 .NET Framework 程序集的支持策略

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

原始产品版本:SQL Server
原始 KB 数: 922672

程序集测试和支持

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

要注册的 .Net Frameworks 程序集 AssemblyName 在 SQL Server 托管环境中未完全测试。

该消息表示尚未在 SQL Server CLR 托管的环境中测试 .NET Framework 程序集。 因此,SQL Server CLR 托管的环境中不支持该程序集。

未测试的 .NET Framework 程序集可能会在出现严重条件(如内存不足情况)时退出其主机进程。 可以在 SQL Server CLR 托管环境中自行使用程序集。 但是,SQL Server 客户支持服务(CSS)将帮助你使用和排查与不支持的 .NET Framework 程序集关联的问题。 如果 CSS 确定特定的不受支持的程序集导致 SQL Server 问题,则系统可能会要求你停止使用程序集。 此外,如果有必要,当 CSS 排查特定 SQL Server 问题时,系统可能会要求你暂时停止使用程序集。

程序集注册

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

使用不在受支持列表中的 .NET Framework 程序集时,需要使用 CREATE ASSEMBLY 该语句在 SQL Server 数据库中注册程序集和引用的程序集。 SQL Server CREATE ASSEMBLY 语句仅允许注册纯 .NET Framework 程序集。 如果程序集或任何引用的程序集不是纯 .NET Framework 程序集(因此是混合程序集),则会收到以下错误消息:

Msg 6544,级别 16,状态 1,第 2 行
程序集“程序集名称”的 CREATE ASSEMBLY 失败,因为程序集“<程序集名称>>”<格式不正确或不是纯 .NET 程序集。
无法验证的 PE 标头/本机存根。

在这种情况下,除非程序集位于本文所述的受支持列表中,否则不能将 .NET Framework 程序集与 SQL CLR 一起使用。 此外,.NET Framework 程序集还可以从纯程序集更改为版本之间的混合程序集。 如果使用的程序集不在受支持的列表中,则可能有一种情况是程序集在 .NET Framework 的一个版本中工作,但不能在另一个版本中工作。 此限制不适用于受支持列表中的程序集,因为这些程序集不需要使用 CREATE ASSEMBLY 语句进行注册。

此外,升级 .NET Framework 后必须维护这些程序集。 执行 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