バージョン依存レジストリ キー
マネージ アセンブリの多くは、COM で使用するために Windows のレジストリに登録する必要があります。 登録を必要としない COM 相互運用機能を使用するアセンブリには、この要件は該当しません。
アセンブリを登録するには、アセンブリ登録ツール (Regasm.exe) または RegistrationServices クラスによって公開されるメソッドを使用します。 どちらの機構でも、コンピューター上で同一アセンブリの複数のバージョンを side-by-side 実行できるようにするバージョン依存レジストリ キーが作成されます。
このトピックでは、Regasm.exe がどのように COM 対応レジストリ エントリを追加および削除するかについて説明します。 このトピックは、カスタム インストール プログラムを作成する場合に、COM 相互運用機能用に side-by-side 実行を行うための登録の要件を理解する上で役立ちます。
バージョン依存キーのレジストリのレイアウト
アセンブリを最初に登録するときに、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 は、すべてのバージョン依存サブキーを削除します。 また、アセンブリに関連付けられている最上位レベルのキーもレジストリから削除されます。
参照
概念
side-by-side 実行のための COM アプリケーションの構成