【问题标题】:Updating .NET assemblies already in SQL Server更新 SQL Server 中已有的 .NET 程序集
【发布时间】:2012-04-13 15:48:03
【问题描述】:

在 SQL Server 2005 中创建 .NET 程序集后,当 MS 发布 .NET 服务包/错误修复程序然后通过通常的 Microsoft 更新安装时,我需要做些什么吗? SQL 程序集是指向原始 .NET .dll 的链接还是 SQL Server 有自己的私有副本?

【问题讨论】:

    标签: .net sql-server-2005 assemblies


    【解决方案1】:

    在 SQL Server 2005 中创建 .NET 程序集后,当 MS 发布 .NET 服务包/错误修复,然后通过通常的 Microsoft 更新安装时,我需要做些什么吗?

    这取决于。 SQL Server CLR 集成不支持每个 .NET 程序集,请参阅Support policy for untested .NET Framework assemblies in the SQL Server CLR-hosted environment。如果您将自己限制在受支持的程序集(如下),那么您无需执行任何操作。

    • 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

    但是,如果您引用未经测试的程序集,您可能会收到错误,因为

    当 CLR 加载程序集时,CLR 会验证相同的 大会在 GAC 中。如果相同的程序集在 GAC 中,则 CLR 验证这些程序集的模块版本 ID (MVID) 匹配。如果这些程序集的 MVID 不匹配,您会收到 “症状”部分提到的错误消息。

    重新编译程序集时,程序集的 MVID 会更改。 因此,如果您更新 .NET Framework,则 .NET Framework 程序集具有不同的 MVID,因为这些程序集是 重新编译。此外,如果您更新自己的程序集,则 程序集被重新编译。因此,装配也有不同的 MVID。

    来自Error message when you execute a CLR routine or use an assembly in SQL Server 2005: "Assembly in host store has a different signature than assembly in GAC. (Exception from HRESULT: 0x80131050)" http://support.microsoft.com/kb/949080

    如果您确实遇到这种情况,您只需使用 ALTER ASSEMBLY 语句重新指向新程序集

    【讨论】:

    • 我肯定在使用一些不受支持的 .NET 程序集。 (我写了一个 CLR 触发器来打印记录插入,使用 WPF 打印。)
    【解决方案2】:

    当 .NET 服务包/错误修复由 MS 发布然后通过通常的 Microsoft 更新安装时,我需要做些什么吗?

    没有。修复通常应用于运行时本身,因此您无需重新构建程序集或任何东西。

    SQL 程序集是指向原始 .NET .dll 的链接还是 SQL Server 有自己的私有副本?

    SQL Server 会为自己保留副本,您可以在 sys.assembly_files 视图中看到这些副本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 2011-09-15
      相关资源
      最近更新 更多