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 程序集 (因此是混合程序集) ,则会收到以下错误消息:

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

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

此外,在升级 .NET Framework 后,必须维护这些程序集。 在 SQL Server 中执行 CLR 例程或使用程序集时,会显示以下错误消息:

主机存储中的程序集的签名与 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