side-by-side アセンブリについて

Windowsサイド バイ サイド アセンブリはマニフェストによって記述されます。 サイド バイ サイド アセンブリには、DLL のグループ、Windows クラス、COM サーバー、タイプ ライブラリ、またはインターフェイスなど、常にアプリケーションに一緒に提供されるリソースのコレクションが含まれています。 これらはアセンブリ マニフェストで説明されています。

通常、サイド バイ サイド アセンブリは 1 つの DLL です。 たとえば、Microsoft COMCTL32 アセンブリはマニフェストを持つ 1 つの DLL ですが、Microsoft Visual C++開発システムランタイム ライブラリ アセンブリには複数のファイルが含まれています。 マニフェストには、サイド バイ サイド アセンブリとサイド バイ サイド アセンブリの依存関係を記述する メタデータ が含まれています。

サイド バイ サイド アセンブリは、名前付け、バインド、バージョン管理、展開、構成の基本的な単位としてオペレーティング システムによって使用されます。 すべてのサイド バイ サイド アセンブリには、一意の ID があります。 アセンブリ ID の属性の 1 つは、そのバージョンです。 詳細については、「 アセンブリバージョン」を参照してください。

Windows XP 以降では、同時に実行されているアプリケーションで複数のバージョンのサイド バイ サイド アセンブリを使用できます。 マニフェストとアセンブリ バージョン番号は、アセンブリ バージョンのアプリケーションへの適切なバインドを決定するためにローダーによって使用されます。 次の図に示すように、サイド バイ サイド アセンブリとマニフェストは、アプリケーションとサイド バイ サイド マネージャーと連携します。

representation of typical side-by-side assembly

前の例では、バージョン 6.0 Comctl32.DLLとバージョン 5.0 Comctl32.DLLの両方がサイド バイ サイド アセンブリ キャッシュにあり、アプリケーションで使用できます。 アプリケーションが DLL の読み込みを呼び出すとき、サイド バイ サイド マネージャーは、アプリケーションがマニフェストで説明されているバージョン依存を持っているかどうかを判断します。 関連するマニフェストがない場合は、アセンブリの既定のバージョンが読み込まれます。 Windows XP の場合、バージョン 5.0 のComctl32.DLLがシステムの既定値です。 サイド バイ サイド マネージャーがマニフェストに記載されているバージョン 6.0 への依存を検出した場合、そのバージョンはアプリケーションで実行するために読み込まれます。

いくつかの主要なシステム アセンブリが、サイド バイ サイド アセンブリとして Microsoft から利用できるようになります。 詳細については、「 サポートされている Microsoft Side-by-side アセンブリ」を参照してください。 アプリケーション開発者は、独自のサイド バイ サイド アセンブリを作成することもできます。 詳細については、「 サイド バイ サイド アセンブリの作成に関するガイドライン」を参照してください。 多くの場合、アプリケーション コードを変更しなくても、サイド バイ サイド アセンブリを使用するように既存のアプリケーションを更新できます。

開発者は、サイド バイ サイド アセンブリを使用して 分離されたアプリケーションを作成し、次の理由で既存のアプリケーションを分離されたアプリケーションに更新することをお勧めします。

  • サイド バイ サイド アセンブリにより、DLL バージョンの競合の可能性が軽減されます。
  • サイド バイ サイド アセンブリ共有を使用すると、複数のバージョンの COM または Windows アセンブリを同時に実行できます。
  • アプリケーションと管理者は、展開後に グローバル または アプリケーションごとの構成 ベースでアセンブリ構成を更新できます。 たとえば、アプリケーションを再インストールしなくても、更新プログラムを含むサイド バイ サイド アセンブリを使用するようにアプリケーションを更新できます。