分離アプリケーションおよび side-by-side アセンブリの概念
更新 : 2007 年 11 月
アプリケーションのコンポーネントがすべて side-by-side アセンブリである場合、そのアプリケーションは分離アプリケーションと見なされます。side-by-side アセンブリは、アプリケーションで実行時に使用できるリソース (DLL のグループ、ウィンドウ クラス、COM サーバー、タイプ ライブラリ、またはインターフェイス) のコレクションです。通常、side-by-side アセンブリは 1 つまたは複数の DLL です。たとえば、C ランタイム ライブラリ アセンブリは、3 つの DLL (msvcr90.dll、msvcm90.dll、および msvcp90.dll) を含んでおり、アプリケーションが CRT ライブラリの関数を使用してビルドされるときに、そのアプリケーションによって使用されます。
共有またはプライベート
side-by-side アセンブリには、共有またはプライベートの 2 種類があります。共有 side-by-side アセンブリは、そのアセンブリへの依存をマニフェストで指定している複数のアプリケーションで使用できます。また、同時に実行されている異なるアプリケーションで、複数のバージョンの side-by-side アセンブリを共有できます。プライベート アセンブリは、アプリケーションと一緒に配置されるアセンブリで、そのアプリケーションのみが排他的に使用できます。プライベート アセンブリは、アプリケーションの実行可能ファイルを含むフォルダ、またはそのいずれかのサブフォルダにインストールされます。
マニフェストと検索順序
分離アプリケーションおよび side-by-side アセンブリは、いずれもマニフェストに記述されています。マニフェストは、XML ドキュメントです。これは、外部 XML ファイルにすることも、アプリケーションまたはアセンブリにリソースとして埋め込むこともできます。分離アプリケーションのマニフェスト ファイルは、アプリケーションが実行時にバインドする共有 side-by-side アセンブリの名前およびバージョンの管理に使用されます。side-by-side アセンブリのマニフェストは、side-by-side アセンブリの名前、バージョン、リソース、および依存アセンブリを指定します。共有 side-by-side アセンブリの場合は、マニフェストが WinSxS\Manifests フォルダにインストールされます。プライベート アセンブリの場合は、アセンブリ マニフェストを DLL に ID = 1 のリソースとして含めることをお勧めします。プライベート アセンブリの名前は、DLL の名前と同じにできます。詳細については、「プライベート アセンブリ」を参照してください。
実行時に、Windows は、アプリケーションのマニフェストから取得されるアセンブリ情報を使用して、対応する side-by-side アセンブリの検索および読み込みを行います。分離アプリケーションがアセンブリの依存関係を指定する場合、オペレーティング システムでは、最初に、WinSxS フォルダ内の共有アセンブリからそのアセンブリが検索されます。要求されたアセンブリが見つからない場合、オペレーティング システムでは、次に、アプリケーションのディレクトリ構造のフォルダにインストールされているプライベート アセンブリが検索されます。詳細については、「Assembly Searching Sequence」を参照してください。
依存関係の変更
アプリケーションが配置された後に、発行者構成ファイルおよびアプリケーション構成ファイルを変更して、side-by-side アセンブリの依存関係を変更できます。発行者構成ファイルは、発行者ポリシー ファイルとも呼ばれる XML ファイルです。これは、あるバージョンの side-by-side アセンブリを使用するアプリケーションおよびアセンブリを、同じアセンブリの別のバージョンを使用するようにグローバルにリダイレクトします。依存関係を変更する適切な例としては、バグ修復またはセキュリティ修復が特定の side-by-side アセンブリ用に配置されたときに、このアセンブリの発行者が、すべてのアプリケーションをリダイレクトして新しいバージョンのアセンブリを使用させる場合があります。アプリケーション構成ファイルは、あるバージョンの side-by-side アセンブリを使用する独自のアプリケーションを、同じアセンブリの別のバージョンを使用するようにリダイレクトする XML ファイルです。これは、特定のアプリケーションをリダイレクトして、グローバル発行者構成ファイルで定義されているバージョンとは別のバージョンの side-by-side アセンブリを使用する場合に使用できます。詳細については、「構成」を参照してください。
Visual C++ のライブラリ
Visual C++ 2005 では、ATL、MFC、CRT、標準 C++、OpenMP、MSDIA などの各ライブラリは、共有 side-by-side アセンブリとして、ネイティブなアセンブリ キャッシュに配置されます。既定では、Visual C++ 2005 でビルドされるすべてのアプリケーションは、最終的なバイナリ内に埋め込まれたマニフェストと共にビルドされます。マニフェストには、Visual C++ ライブラリに対するこのバイナリの依存関係が記述されています。Visual C++ アプリケーションのマニフェスト生成については、「C/C++ プログラムのマニフェスト生成についての理解」を参照してください。