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

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

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

程序集测试和支持

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

警告

您注册的 .Net framework 程序集 AssemblyName 未在托管环境中SQL Server测试。

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

当出现.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程序集。 CREATE SQL SERVER 语句仅允许注册纯.NET Framework程序集。 如果程序集或任何引用的程序集不是纯 .NET Framework程序集 (因此是混合程序集) ,则会收到以下错误消息: 

Msg 6544,级别 16,状态 1,第 2 行
CREATE ASSEMBLY for assembly ' <assembly name> ' failed because assembly ' ' is <assembly name> malformed or not a pure .NET assembly.
不可验证的 PE 标头/本机存根。

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

此外,您必须在升级 .NET Framework 之后维护这些程序集。 在运行 CLR 例程或使用程序集时出现SQL Server:

主机存储中的程序集与 GAC 中的程序集具有不同的签名。 (HRESULT 中的异常:0x80131050)

CLR 托管的环境中SQL Server程序集

CLR .NET Framework环境中支持SQL Server程序集: 

  • 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