side-by-side 実行の概要

side-by-side 実行は、アプリケーションまたはコンポーネントの複数のバージョンを同じコンピュータで実行する機能です。共通言語ランタイムの複数のバージョン、および 1 つの共通言語ランタイムを使用するアプリケーションとコンポーネントの複数のバージョンを同じコンピュータで同時に実行できます。

共通言語ランタイムの 2 つの異なるバージョンを同じコンピュータで使用する複数のアプリケーションを次の図に示します。アプリケーション A、B、および C はランタイム バージョン 1.0 を使用し、アプリケーション D はランタイム バージョン 1.1 を使用します。

ランタイムの 2 つのバージョンの side-by-side 実行

side-by-side 実行

.NET Framework は、共通言語ランタイムと API 型を含む 24 個前後のアセンブリで構成されています。ランタイムと .NET Framework アセンブリは、個別にバージョン管理されます。たとえば、ランタイムのバージョン 1.0 は実際にはバージョン 1.0.3705.0 で、.NET Framework アセンブリのバージョン 1.0 はバージョン 1.0.3300.0 です。

コンポーネントの 2 つの異なるバージョンを同じコンピュータで使用する複数のアプリケーションを次の図に示します。アプリケーション A とアプリケーション B はコンポーネントのバージョン 1.0 を使用し、アプリケーション C は同じコンポーネントのバージョン 2.0 を使用します。

コンポーネントの 2 つのバージョンの side-by-side 実行

side-by-side 実行

side-by-side 実行により、アプリケーションがバインドするコンポーネントのバージョンやアプリケーションが使用するランタイムのバージョンをより詳細に制御できます。

side-by-side 実行の利点

Microsoft Windows XP および .NET Framework 以前では、アプリケーションは同じコードの非互換バージョンを識別できないため、DLL の競合が発生することがありました。DLL に含まれる型情報は、ファイル名だけに関連付けられていました。アプリケーションは、DLL に含まれている型とアプリケーションの作成に使用された型が同じであるかどうかを判断できませんでした。この結果、新しいバージョンのコンポーネントが古いバージョンを書き変え、アプリケーションが壊れてしまうことがありました。

side-by-side 実行と .NET Framework によって、DLL の競合を防ぐ次の機能が得られます。

  • 厳密な名前付きアセンブリ

    side-by-side 実行機能は、厳密な名前付きアセンブリを使用して、型情報をアセンブリの特定のバージョンにバインドします。これによって、アプリケーションまたはコンポーネントが、アセンブリの無効なバージョンをバインドするのを防げます。また、厳密な名前付きアセンブリによって、1 つのファイルの複数のバージョンが同じコンピュータ上に存在することが可能で、アプリケーションはこれらを使用できます。詳細については、「厳密な名前付きアセンブリ」を参照してください。

  • バージョンを認識するコード ストレージ

    .NET Framework のグローバル アセンブリ キャッシュには、バージョンを認識するコード ストレージが用意されています。グローバル アセンブリ キャッシュは、コンピュータ全体にわたるコード キャッシュで、.NET Framework がインストールされているすべてのコンピュータに存在します。グローバル アセンブリ キャッシュは、バージョン、カルチャ、発行者の情報に基づいてアセンブリを格納し、コンポーネントおよびアプリケーションの複数バージョンをサポートします。詳細については、「グローバル アセンブリ キャッシュ」を参照してください。

  • 分離

    .NET Framework を使用すると、分離して実行できるアプリケーションとコンポーネントを作成できます。これは、side-by-side 実行に欠くことのできない構成要素です。分離には、使用しているリソースを認識し、アプリケーションまたはコンポーネントの複数のバージョンでこれを確実に共有することも含まれます。また、分離には、バージョンに固有の方法でファイルを格納する方法も含まれます。分離の詳細については、「side-by-side 実行用のアプリケーションおよびコンポーネントを作成するときのガイドライン」を参照してください。

バージョンの互換性

.NET Framework Version 1.0 と 1.1 は互換性を持つようにデザインされています。.NET Framework Version 1.0 で作成されたアプリケーションはバージョン 1.1 で動作し、.NET Framework Version 1.1 で作成されたアプリケーションはバージョン 1.0 で動作する必要があります。ただし、.NET Framework Version 1.1 で追加された API 機能は、.NET Framework Version 1.0 では動作しません。.NET Framework Version 2.0 で作成されたアプリケーションは .NET Framework Version 2.0 でのみ動作します。.NET Framework Version 2.0 で作成されたアプリケーションは、Version 1.1 以前では動作しません。ランタイムの互換性の詳細については、「バージョンの互換性」を参照してください。

.NET Framework のバージョンは、ランタイムとそれに対応する .NET Framework アセンブリで構成される単一のユニットとして扱われます。この概念をアセンブリの統一と呼んでいます。他のバージョンの .NET Framework アセンブリを含むようにアセンブリ バインディングをリダイレクトすることもできますが、既定のアセンブリ バインディングのオーバーライドは危険性が伴うため、配置する前に厳密なテストが必要です。

参照

処理手順

方法 : アプリケーション構成ファイルを使用して対象とする .NET Framework のバージョンを指定する

その他の技術情報

side-by-side 実行
side-by-side 実行の基本
複数バージョンのアプリケーションまたはコンポーネントの作成