与版本相关的注册表项

大多数托管程序集必须在 Windows 注册表中注册后才能供 COM 使用。 但对于使用免注册 COM 互操作的程序集没有这个要求。

可以使用程序集注册工具 (Regasm.exe)RegistrationServices 类公开的方法来注册程序集。 每种机制都会创建与版本相关的注册表项,这样,就可以在计算机上并行运行同一程序集的多个版本。

本主题讲解 Regasm.exe 如何添加和移除支持 COM 的注册表项。 如果您要编写自定义安装程序,本主题可以帮助您了解并行执行 COM 互操作的注册要求。

版本相关项的注册表布局

最初注册程序集时,Regasm.exe 将为程序集中的每个类创建一组顶级项,并在 HKEY CLASSES\ROOT\CLSID\{}\InprocServer32 项下添加一个子项以便唯一标识程序集版本。 以下注册表布局显示 className 版本 1.0.0.0 的子项。

CLSID\{}
@="namespaceName.className"
CLSID\{}\InprocServer32
@="mscoree.dll"
ThreadingModel = "Both" 
Class="namespaceName.className"
Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
RuntimeVersion="v1.0.3705"
1.0.0.0
   Class="namespaceName.className"
   Assembly="name, Version=1.0.0.0, Culture=neutral, PublicKeyToken="
          RuntimeVersion="v1.0.3705"
CLSID\{}\ProgId
@="namespaceName.className"
CLSID\{}\ImplementedCategories\{guid}

注册该程序集的后续版本时,Regasm.exe 将为每个新版本添加一个与版本相关的子项。 同一程序集的所有版本共享顶级项(如上面的注册表布局中所示)。 下面的部分布局显示同一程序集的子项 1.0.0.0 和 2.0.0.0。

1.0.0.0
   Class="namespaceName.className"
   Assembly="name, Version=1.0.0.0, Culture=neutral, PublicKeyToken="
          RuntimeVersion="v1.0.3705"
2.0.0.0
   Class="namespaceName.className"
   Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
          RuntimeVersion="v1.1.5000"

移除版本相关项

Regasm.exe 在卸载某个版本的程序集时仅移除与版本相关的子项。 例如,如果卸载了 className 版本 1.0.0.0,Regasm.exe 将移除 1.0.0.0 子项,但会保留所有顶级项和 2.0.0.0 子项。

CLSID\{}
   @="namespaceName.className"
CLSID\{}\InprocServer32
   @="mscoree.dll"
ThreadingModel = "Both" 
Class="namespaceName.className"
Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
RuntimeVersion="v1.0.3705"
Version
2.0.0.0
   Class="namespaceName.className"
   Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
          RuntimeVersion="v1.1.5500"
CLSID\{}\ProgId
   @="namespaceName.className"
CLSID\{}\ImplementedCategories\{guid}

卸载某个程序集的最后一个版本时,Regasm.exe 将移除所有与版本相关的子项。 它还会从注册表中移除与该程序集相关的顶级项。

请参见

概念

从 COM 应用程序进行的运行时初始化

配置 COM 应用程序并行执行

应用与版本相关的特性

COM 组件和并行执行

其他资源

COM 互操作的并行执行