应用与版本相关的特性
如果您使用的是 .NET Framework 1.1 版及更高版本,可以对托管源代码应用设计时特性,以便正确激活在 Windows 注册表中注册的类型。 本主题介绍何时应用 ComCompatibleVersionAttribute 和 TypeLibVersionAttribute 特性。
生成的 GUID 与固定的 GUID
类型库导出程序 (Tlbexp.exe) 和程序集注册工具 (Regasm.exe) 及 /tlb 选项可以基于导出供 COM 使用的程序集的版本号生成类标识符 (CLSID)。 导出的每个新版本程序集所包含的 CLSID 对该程序集版本都是唯一的。 COM 应用程序在调用 CoCreateInstance 方法时使用 CLSID 来标识类。
如果新程序集版本与以前的版本不兼容,此行为非常有用。 例如,如果从新程序集中移除了一个或多个类型,则旧版本与新版本就不兼容。
备注
与 CLSID 不同,编程标识符 (ProgID) 不会随程序集的每个新版本而更改。生成不兼容的新程序集时,应应用 ProgIdAttribute 手动更改 ProgID。
但是,许多程序集都与其早期版本兼容,而且这些程序集的开发人员希望应用程序使用最新版本。 通过在多个程序集版本间保留相同的 CLSID(使用固定的 GUID),现有 COM 应用程序可以直接使用新版本程序集中的类型,而无须提供旧程序集,也无须重新编译。
ComCompatibleVersionAttribute 强制使当前程序集版本中的所有 CLSID 与早期版本中的 CLSID 相同。 有关应用此特性的其他信息,请参见 ComCompatibleVersionAttribute 参考文档。
类型库版本
类型库版本号包括用于生成它的程序集的主版本号和次版本号。 而程序集版本号则有四个部分。 两个完全不同的程序集版本(1.0.0.0 和 1.2.500.0)自动生成不同的类型库版本(1.0 和 1.2);但导出供 COM 使用时,前后两个紧邻的版本(1.2.0.0 和 1.2.500.0)将生成相同的类型库版本 (1.2)。
使用 TypeLibraryVersionAttribute 可以在托管源代码中显式指定类型库版本号。 有关使用此特性的其他信息,请参见 TypeLibVersionAttribute 参考文档。