.NET Framework アセンブリ統合

side-by-side 実行では、.NET Framework の異なるバージョンで作成されたコンポーネントでアプリケーションを構成できます。これによって、コンポーネントの依存関係に競合が発生する可能性があります。たとえば、コンポーネント A は .NET Framework Version 1.0 で作成され、System.Data アセンブリのバージョン 1.0 を使用する必要があるとします。また、コンポーネント B は .NET Framework Version 1.1 で作成され、System.Data アセンブリのバージョン 1.1 を使用する必要があります。アセンブリ バージョンに互換性がない場合に両方のアセンブリが同時に読み込まれると、予期しない型キャスト例外、またはさらに悪い問題が発生することがあります。

アプリケーションが使用する .NET Framework バージョンの決定方法

この問題を解決するため、アプリケーションが .NET Framework の異なるバージョンで作成されたコンポーネントを使用する場合、アプリケーションに対応するランタイム バージョンは、アプリケーションとそのすべてのコンポーネントが .NET Framework アセンブリのどのバージョンを使用しているかを判断します。前の例では、アプリケーションが .NET Framework Version 1.1 に対応している場合は、System.Data アセンブリのバージョン 1.1 が読み込まれ、アプリケーションを構成するすべてのコンポーネントによって共有されます。コンポーネント A から System.Data アセンブリのバージョン 1.0 への参照は、実行時にバージョン 1.1 への参照に昇格されます。

この動作は、Machine.config ファイルまたは Web.config ファイルに <bindingRedirect> 要素を追加することによってオーバーライドできます。これによって、アプリケーションは、更新されたアセンブリ バージョンを使用できます。更新されたバージョンは、特定の種類のアプリケーション用の既存のアセンブリを置換するようにデザインされています。たとえば、SOAP バージョン 1.2 をサポートする更新版の System.Web.Service.dll が将来リリースされるとき、ランタイムと共にインストールされた元のバージョンの代わりに、アプリケーションでこのバージョンを使用できます。

この動作も、ASP.NET ホスト構成ファイル (Aspnet.config) でオーバーライドできます。ASP.NET は、このファイルを使用して、Web.config ファイルでのオーバーライドの設定にもかかわらず、System.Web.dll と System.Web.RegularExpressions.dll のバージョンが、アプリケーションと対応するランライムのバージョンに常に一致することを確認します。

アプリケーションの作成時よりも後のバージョンの ASP.NET で作成されたコンポーネントを使用することもあります。アプリケーションに対応する ASPNET ISAPI バージョンは、アプリケーションと共に使用するランタイムのバージョンを常に決定します。アプリケーションが以前のバージョンのランタイムを使用するように構成されている場合は、実行時にコンポーネントがそのバージョンに自動的にリダイレクトされます。アプリケーションの作成時よりも後のバージョンの .NET Framework で作成されたコンポーネントを使用する場合は、次の点を考慮してください。

  • コンポーネントが、.NET Framework の後のバージョンに固有の機能を使用したり、固有の動作に依存したりしないことを確認します。これらの機能は、ランタイムの前のバージョンでは利用できない可能性があります。
  • ASP.NET は IIS のスクリプト マップを使用してアプリケーションをランタイムのバージョンにバインドします。構成要素 <supportedRuntime><requiredRuntime> は、ASP.NET アプリケーションには使用できません。

別の方法として、コンポーネントの作成に使用したランタイム バージョンがコンピュータにインストールされている場合は、後のランタイム バージョンを使用するようにアプリケーションを再構成できます。.NET Framework の後のバージョンは下位互換性があるため、アプリケーションを変更せずに動作させることができます。ランタイムの特定のバージョンを使用するように ASP.NET アプリケーションを構成する方法については、「ASP.NET バージョン用の ASP.NET アプリケーションの構成」を参照してください。

参照

ASP.NET での side-by-side 実行のサポート | <bindingRedirect> 要素