在 SQL Server 2005 中创建 .NET 程序集之后,当 MS 发布 .NET 服务包/错误修复程序然后通过通常的 Microsoft 更新安装时,我需要做些什么吗?SQL 程序集是指向原始 .NET .dll 的链接,还是 SQL Server 有自己的私有副本?
2 回答
在 SQL Server 2005 中创建 .NET 程序集之后,当 MS 发布 .NET 服务包/错误修复程序然后通过通常的 Microsoft 更新安装时,我需要做些什么吗?
这取决于。SQL Server CLR 集成不支持每个 .NET 程序集,请参阅SQL Server CLR 托管环境中未经测试的 .NET Framework 程序集的支持策略。如果您将自己限制为受支持的程序集(如下),那么您无需执行任何操作。
- Microsoft.VisualBasic.dll
- mscorlib.dll
- 系统数据.dll
- 系统.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。
执行 CLR 例程或在 SQL Server 2005中使用程序集时出现错误消息:“主机存储中的程序集与 GAC 中的程序集具有不同的签名。(来自 HRESULT 的异常:0x80131050)”http://support.microsoft.com/ KB/949080
如果您确实遇到这种情况,您需要做的就是使用 ALTER ASSEMBLY 语句重新指向新程序集
当 MS 发布 .NET 服务包/错误修复,然后通过通常的 Microsoft 更新安装时,我需要做些什么吗?
不会。修复通常应用于运行时本身,因此您不需要重新构建程序集或任何东西。
SQL 程序集是指向原始 .NET .dll 的链接,还是 SQL Server 有自己的私有副本?
SQL Server 会为自己保留副本,您可以在sys.assembly_files
视图中看到这些副本。