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

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

原始产品版本:SQL Server
原始 KB 编号: 922672

程序集测试和支持

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

正在注册的 .Net frameworks 程序集 AssemblyName 未在SQL Server托管环境中进行全面测试。

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

发生内存不足等严重情况时,未经测试的.NET Framework程序集可能会退出其主机进程。 可以在 CLR 托管的SQL Server环境中使用该程序集,风险自担。 但是,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后,必须维护这些程序集。 执行 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