错误 #: 490 (SQL 修补程序)
概要
当您尝试升级或降级的 Microsoft SQL Server 2005年实例中公共语言运行时 (CLR) 对象的程序集时,您无法更改程序集的元数据中引用的程序集的版本。此外,如果您使用具有强名称的程序集的 CLR 对象时,不能通过使用更改集语句降程序集。
简介
本文介绍如何升级或降级具有 CLR 对象的 SQL Server 2005 实例中引用的程序集的程序集。
详细信息
如何升级或降级程序集
在 SQL Server 2005 中,可以使用更改集语句来升级或降级独立程序集不是具有强名称创建。具有强名称的程序集,您可以升级,但不能通过使用更改集语句降级程序集。
您无法升级或降级以下方案中的程序集:
-
为实例中的 CLR 对象创建程序集 A。程序集 A 具有引用的程序集。引用的程序集是程序集 b。
-
程序集 B 中有没有被引用的程序集。
-
重新编译的程序集引用不同版本的程序集 b。
在这种情况下,您可以更改程序集语句用于升级到新版本的程序集 B。如果组件 B 不是具有强名称的程序集,您也可以降级到旧版本的程序集 B。但是,不能使用变更集语句进行升级或降级到重新编译的版本的程序集 A。
这种现象出现的原因是 SQL Server 创建 CLR 合成策略,当您创建程序集 a。该 CLR 合成策略会自动映射 B 在 A 到实际程序集 B.SQL Server 版本加载运行时,当您升级或降级到另一个版本的程序集 B 中的程序集 B 的新版本的程序集的元数据的程序集的版本。这种现象出现,即使程序集 A 指的是原始版本的程序集 b。但是,当您尝试升级或降级程序集 A,当程序集 A 包含元数据中的程序集 B 的新版本时,变更集语句将失败,您收到类似于以下内容的错误消息:
错误消息 1
Msg 6529,级别 16 状态 1,第 1 行
更改程序集失败,因为已更改引用的程序集 RefAsm 的标识。请确保未更改版本、 名称和公钥。
错误消息 2
Msg 6282,级别 16 状态 1,第 1 行
更改程序集失败,因为引用的程序集将会更改。引用的程序集列表必须保持不变。
升级或降级程序集
备注:
-
以下步骤升级或降级程序集 A 中的"如何升级或降级程序集"一节中所述的方案。
-
本示例假定两个程序集的版本为 1.0.0.0 和程序集都用 C# 编写。当您执行这些步骤时,您尝试升级到 2.0.0.0 版的程序集 A 和 B 的程序集。
若要升级或降级程序集 A,请按照下列步骤。
-
程序集 B 的版本 1.0.0.0 备份到文件夹。
-
修改,然后重新编译的程序集 B 版本 2.0.0.0。
-
使用变更集语句升级 SQL Server 2005 中的程序集 B。
-
修改,然后重新编译的程序集 A 到 2.0.0.0 版本。当您执行此操作,请从步骤 1 中备份的程序集 B 的引用版本 1.0.0.0。若要执行此操作,使用 Csc.exe 编译器工具和结合使用/reference开关。例如,使用下面的命令:
csc /target:library/输出:AssemblyA.dll AssemblyA.cs AssemblyInfo.cs /reference:"BackupFolder\AssemblyB.dll"注意:若要验证的程序集 B 中的元数据的程序集的版本,请使用 Ildasm.exe 工具打开程序集 A。然后,验证下的清单部分中引用的程序集的元数据信息。
-
使用变更集语句升级 SQL Server 2005 中的程序集 A。
如何将降级具有强名称的程序集
如果您使用具有强名称的程序集的 CLR 对象时,SQL Server 2005 不支持使用变更集语句降级程序集。如果您尝试通过使用更改集语句降级版本的程序集,您将收到类似于以下内容的错误消息:
Msg 6579,级别 16 状态 1,第 1 行
改变从程序集 Asm1,版本 = 1.1.0.0,区域性程序 = 3a52b896cff0513d,processorarchitecture = msil' 到 ' Asm1,版本 = 1.0.0.0,区域性程序 = 3a52b896cff0513d,processorarchitecture = msil' 不是兼容的升级。
当您想要降级的强名称程序集时,请执行以下步骤:
-
删除所有依赖程序集的对象。
-
删除程序集的新版本。
-
创建程序集的早期版本。
-
创建所有必需的对象取决于该程序集。
注意:您可以通过使用更改集语句升级具有强名称的程序集。但是,如果升级涉及到引用的程序集,则必须按照"升级或降级程序集"一节中列出的相同步骤。
参考资料
有关更改程序集的语句的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) Web 站点:
http://msdn2.microsoft.com/en-us/library/ms186711.aspx关于 Ildasm.exe 实用程序的详细信息,请访问下面的 MSDN 网站:
http://msdn2.microsoft.com/en-us/library/aa309387(VS.71).aspx