ASP.NET の side-by-side 実行の概要

更新 : 2007 年 11 月

.NET Framework では、共通言語ランタイムの複数のバージョンを同じコンピュータにインストールできます。既定では、既にランタイムがインストールされているコンピュータに新しいバージョンの .NET Framework をインストールすると、すべての ASP.NET アプリケーションはこのバージョンの .NET Framework を使用するように自動的に更新されます。.NET Framework の新しいバージョンは下位互換性を持つようにデザインされていますが、ランタイムの特定のバージョンを使用するように ASP.NET アプリケーションを構成することもあります。

このトピックの内容は次のとおりです。

  • シナリオ

  • <your technology here> 機能

  • 背景

  • コード例

  • クラス リファレンス

  • その他のリソース

  • 新機能

シナリオ

ページのトップへ

機能

ページのトップへ

背景

これまで、コンピュータでコンポーネントまたはアプリケーションを更新するときは、古いバージョンを削除し、新しいバージョンに置き換えていました。新しいバージョンに以前のバージョンとの互換性がない場合は、通常、このコンポーネントまたはアプリケーションを使用する他のアプリケーションは壊れてしまいます。.NET Framework では side-by-side 実行がサポートされるため、アセンブリまたはアプリケーションの複数のバージョンを同じコンピュータに同時にインストールできるようになりました。複数のバージョンを同時にインストールできるので、異なるバージョンを使用する他のアプリケーションに影響を与えずに、マネージ アプリケーションが使用するバージョンを選択できます。

ASP.NET では、同じコンピュータにインストールされたアプリケーションは side-by-side 実行されることになっていますが、.NET Framework の異なるバージョンを使用します。ASP.NET での side-by-side 実行のサポートと、side-by-side 実行用に ASP.NET アプリケーションを構成する方法について、以下のトピックで説明します。

.NET Framework では、共通言語ランタイムの複数のバージョンを同じコンピュータにインストールできます。既定では、既にランタイムがインストールされているコンピュータに新しいバージョンの .NET Framework をインストールすると、すべての ASP.NET アプリケーションはこのバージョンの .NET Framework を使用するように自動的に更新されます。例外は、互換性のないバージョンのランタイムにバインドされているアプリケーションや、ランタイムの以降のバージョンにバインドされているアプリケーションです (通常、互換性は .NET Framework のバージョン番号で決まります。一般にメジャー バージョンが異なると互換性がありません。これに対して、マイナー バージョンが更新されている場合やビルド番号のバージョンが異なる場合は互換性があります)。.NET Framework の新しいバージョンは下位互換性を持つようにデザインされていますが、特定のバージョンのランタイムを使用するように ASP.NET アプリケーションを構成することもあります。

ASP.NET アプリケーションのスクリプト マップ

.NET Framework の複数のバージョンが同じコンピュータにインストールされているとき、それぞれのインストールには独自のバージョンの ASP.NET ISAPI 拡張機能 (Aspnet_isapi.dll) が含まれています。ASP.NET ISAPI 拡張機能によって、アプリケーションで使用する .NET Framework のバージョンが決まります。任意の ASP.NET ISAPI 拡張機能を使用するように ASP.NET アプリケーションを構成できます。ASP.NET アプリケーションで使用する ASP.NET ISAPI 拡張機能を指定するために、アプリケーション用のインターネット インフォメーション サービス (IIS: Internet Information Service) にスクリプト マップ (アプリケーション マップと呼ばれることもある) が登録されます。

スクリプト マップは、.aspx などのファイル名拡張子と GET や POST などの HTTP 動詞を適切な ISAPI 拡張機能に関連付けます。たとえば、IIS が .aspx ファイルの要求を受け取ると、アプリケーションのスクリプト マップは、その .aspx ファイルを ASP.NET ISAPI 拡張機能の適切なバージョンに転送するように IIS に指示します。通常、各 ASP.NET アプリケーションのスクリプト マップはインターネット インフォメーション サービスの管理コンソールで設定され、アプリケーションに直接適用されるか、または親アプリケーションから継承されます。既定では、.NET Framework をインストールするときに、既存のすべての ASP.NET アプリケーションのスクリプト マップは、アプリケーションが以降のバージョンまたは互換性のないバージョンを使用していない限り、新しい ASP.NET ISAPI 拡張機能を使用するように自動的に更新されます。

ASP.NET アプリケーションのスクリプト マップの再構成を簡単にするために、.NET Framework の各インストールには、対応する独自のバージョンの ASP.NET IIS 登録ツール (Aspnet_regiis.exe) が含まれています。既定では、このツールは次のディレクトリにインストールされます。

%system root%\Microsoft.NET\Framework\versionNumber

このツールを使用して、そのツールと一致するバージョンの ASP.NET ISAPI 拡張機能に ASP.NET アプリケーションを割り当てることができます。

a99txfy5.alert_note(ja-jp,VS.90).gifメモ :

Aspnet_regiis.exe は .NET Framework の特定のバージョンに関連付けられているため、ASP.NET アプリケーションのスクリプト マップを再構成する際に、Aspnet_regiis.exe の適切なバージョンを使用する必要があります。Aspnet_regiis.exe ツールは、そのツールと一致するバージョンの ASP.NET ISAPI 拡張機能に対してのみ、ASP.NET アプリケーションのスクリプト マップを再構成します。

また、このツールは、インストールされている ASP.NET のすべてのバージョンの状態の表示、ASP.NET の対応するバージョンの登録、クライアント スクリプト ディレクトリの作成、および他の構成操作の実行にも使用できます。

スクリプト マップおよび IIS 構成の詳細については、「Setting Application Mappings in IIS 6.0 (IIS 6.0)」を参照してください。ASP.NET アプリケーションのスクリプト マップを更新する方法の詳細については、「ASP.NET IIS 登録ツール (Aspnet_regiis.exe)」を参照してください。

ASP.NET パフォーマンス カウンタ

パフォーマンス カウンタを使用すると、Windows パフォーマンス コンソールから ASP.NET の動作を監視できます。ASP.NET アプリケーションおよび ASP.NET 全体を監視するためのパフォーマンス カウンタ オブジェクトのセットは、.NET Framework のバージョンごとに異なるものがインストールされます。これらのオブジェクトは、それぞれ、名前付け規則 "ASP.NET Apps v.X.X.XXXX.X" と "ASP.NET v.X.X.XXXX.X" を使用します。v.X.X.XXXX.X は ASP.NET のバージョンを示します。

また、.NET Framework は ASP.NET システムと、インストールされているバージョンの ASP.NET に適用される ASP.NET アプリケーション パフォーマンス カウンタもインストールします。これらのカウンタは、ASP.NET のすべてのバージョンに対して有効ですが、インストールされている最新のバージョンに常に対応します。ASP.NET の最新バージョンがアンインストールされた場合、これらのカウンタは残っている最新バージョンの ASP.NET に合わせて関連付けのやり直しを自動的に実行します。

ASP.NET 状態サービス

ASP.NET 状態サービスを使用して、コンピュータのセッション状態を管理できます。同じコンピュータにインストールされている ASP.NET のすべてのバージョンは、ASP.NET の最新バージョンと共にインストールされた状態サービスを共有します。このバージョンは、aspnet_state というサービス名で登録されます。したがって、ASP.NET のこのバージョンがアンインストールされると、コンピュータに残っているサービスの最新のバージョンが登録され、代わりに使用されます。ASP.NET 状態サービスの詳細については、「セッション状態モード」を参照してください。

ASP.NET SQL 状態サーバー

ASP.NET SQL 状態サーバーは、コンピュータ上の SQL のセッション状態の管理に使用します。同じコンピュータにインストールされている ASP.NET のすべてのバージョンは、ASP.NET の最新バージョンと共にインストールされた SQL 状態サーバーを共有します。ASP.NET のこのバージョンがアンインストールされると、コンピュータに残っている最新のバージョンが登録され、代わりに使用されます。ASP.NET SQL 状態サーバーの詳細については、「セッション状態モード」を参照してください。

ASP.NET の複数バージョンの管理

.NET Framework では、共通言語ランタイム (CLR: Common Language Runtime) の複数のバージョンを同じコンピュータにインストールできます。これによって、ASP.NET アプリケーションは他のアプリケーションに影響を与えずに、必要なバージョンを使用できます。ASP.NET の複数のバージョンを同じコンピュータにインストール、アンインストール、および再配布する方法を以下のセクションで説明します。

ASP.NET の複数バージョンのインストール

ASP.NET のバージョンをコンピュータに追加するには、インストールするバージョン用の .NET Framework 再頒布可能パッケージ セットアップ プログラム (Dotnetfx.exe) を実行します。既定では、次の条件に一致すると、既存のすべての ASP.NET アプリケーションが、インストールしているバージョンのランタイムを使用するようにインストール中に自動的に再構成されます。

  • インストールしている .NET Framework バージョンが、現在アプリケーションに割り当てられているバージョンよりも後のバージョンのとき。

  • インストールしている .NET Framework バージョンが、アプリケーションに割り当てられているバージョンと互換性があるとき。一般的に、バージョン番号によって互換性が決められます。マイナー リビジョンとビルド番号の違いには通常は互換性があり、メジャー リビジョン番号の違いには互換性はありません。

    a99txfy5.alert_note(ja-jp,VS.90).gifメモ :

    上記の条件に一致すると、ASP.NET アプリケーションはインストールしている ASP.NET のバージョンを使用するように自動的に更新されますが、現在の Machine.config ファイルにあるカスタム構成設定は、新しくインストールされる Machine.config ファイルには転送されません。アプリケーションがカスタム構成設定を使用する場合は、新しい Machine.config ファイルを手動で更新するか、または ASP.NET IIS 登録ツール (Aspnet_regiis.exe) を使用して、アプリケーションを ASP.NET の前のバージョンに再割り当てする必要があります。

既存のすべてのアプリケーションが、.NET Framework のインストール中のバージョンへ自動的に再割り当てされるのを防ぐには、Dotnetfx.exe セットアップ プログラムで /noaspupgrade コマンドライン オプションを使用します。構文は次のコマンドのとおりです。

Dotnetfx.exe /c:"install /noaspupgrade"

.NET Framework 再頒布可能パッケージの詳細については、「.NET Framework の再頒布」を参照してください。

a99txfy5.alert_note(ja-jp,VS.90).gifメモ :

Windows の [コントロール パネル] の [プログラムの追加と削除] または Windows のサーバーの構成ウィザードを使用して .NET Framework をインストールすると、セキュリティ ロックダウン コンソールで ASP.NET が既定で有効になります。ただし、Microsoft Visual Studio、Windows Update、または .NET Framework 再頒布可能パッケージ (Dotnetfx.exe) を使用して .NET Framework をインストールした場合は、ASP.NET は既定で無効になります。

ASP.NET の個別バージョンのアンインストール

コンピュータに ASP.NET の複数のバージョンがインストールされている場合は、各バージョンを個別にアンインストールできます。通常、ASP.NET のアンインストールは、Windows の [コントロール パネル] の [プログラムの追加と削除] 項目を使用して .NET Framework をアンインストールすることによって行います。アンインストールのプロセスで、セットアップ プログラムは -u オプション (アンインストール フラグ) を指定して ASP.NET IIS 登録ツール (Aspnet_regiis.exe) を呼び出します。

a99txfy5.alert_note(ja-jp,VS.90).gifメモ :

対応する .NET Framework をアンインストールせずに ASP.NET の 1 バージョンだけをアンインストールする場合は、Aspnet_regiis.exe を直接使用します。.NET Framework の各インストールには、対応するバージョンのツールが含まれています。ASP.NET だけをアンインストールするには、アンインストールする ASP.NET のバージョンに対応するバージョンのツールを使用し、-u オプションを指定します。詳細については、「ASP.NET IIS 登録ツール (Aspnet_regiis.exe)」を参照してください。

Aspnet_regiis.exe の -u オプションは、次のアクションを実行します。

  • アンインストールする ASP.NET に現在割り当てられているすべての ASP.NET アプリケーションは、コンピュータに残っている互換性のある最新バージョンの ASP.NET に再割り当てされます。互換性のあるバージョンが存在しない場合は、アプリケーションのスクリプト マップが完全に削除されます。

    a99txfy5.alert_caution(ja-jp,VS.90).gif注意 :

    スクリプト マップを削除すると、IIS は ASP.NET ページをリテラル テキストとして処理します。これによって、ソース コードがクライアントに公開される可能性があります。

  • アンインストールする ASP.NET のバージョンが現在最新のバージョンである場合、ASP.NET 状態サービスは、残っている互換性のある最新バージョンに割り当てられます。互換性のあるバージョンが存在しない場合は、ASP.NET 状態サービスはアンインストールされます。ASP.NET 状態サービスは、ASP.NET の互換性のあるすべてのバージョン間で共有され、常に、インストールされている ASP.NET の最新バージョンに割り当てられます。

  • アンインストールされるバージョンに対応するパフォーマンス オブジェクトとそれに関連するパフォーマンス カウンタを削除します。インストールされている ASP.NET および ASP.NET アプリケーションのすべてのバージョンに適用される汎用パフォーマンス オブジェクトとパフォーマンス カウンタは、コンピュータに残っている最新のバージョンに再割り当てされます。

  • コンピュータにインストールされている ASP.NET が残っていない場合、ASPNET ユーザー アカウントと関連するアクセス制御リストが削除されます。

複数バージョンの ASP.NET をインストールすることによる他の影響については、「ASP.NET の side-by-side 実行の概要」を参照してください。

サード パーティによる .NET Framework の再配布

サード パーティのアプリケーションは、専用の再配布ライセンスの下で、.NET Framework をパッケージ化し、セットアップの一部としてインストールできます。これによって、アプリケーションは実行に必要な .NET Framework の特定のバージョンをインストールできます。.NET Framework 再頒布可能パッケージ (Dotnetfx.exe) は、ランタイムと共に配置するためにアプリケーション用に用意されています。Dotnetfx.exe の既定のインストール スクリプトが、開発したアプリケーションには適していないことがあります。その場合、次に説明するオプションを使用して、アプリケーションのセットアップの一部として .NET Framework をインストールできます。

.NET Framework 再頒布可能パッケージの詳細については、「.NET Framework の再頒布」を参照してください。再頒布可能パッケージの使用許諾契約 (EULA: End User License Agreement) の詳細については、「.NET Framework 再頒布可能パッケージの入手先」を参照してください。

スクリプト マップの自動更新の無効化

既定では、既に .NET Framework がインストールされているコンピュータに新しいバージョンの .NET Framework をインストールすると、アプリケーションが互換性のないランタイムのバージョンや以降のランタイムのバージョンに関連付けられていない限り、すべての ASP.NET アプリケーションが新しいバージョンの .NET Framework を使用するよう自動的に更新されます。通常は、システム管理者だけがこの種のインストールを実行します。.NET Framework がアプリケーションのセットアップの一部としてインストールされる場合は、コンピュータ上の他のアプリケーションにそのバージョンのランタイムの使用を強制しないでください。

通常、セットアップ スクリプトの一部で、Dotnetfx.exe は -i オプションを指定して ASP.NET IIS 登録ツール (Aspnet_regiis.exe) を呼び出して ASP.NET をインストールします。このオプションは、既存のすべての ASP.NET アプリケーションのスクリプト マップの更新を試みます。インストールによって、コンピュータ上の他のアプリケーションのスクリプト マップが自動的に更新されないようにするには、Dotnetfx.exe コマンドを実行するときに /noaspnetupgrade オプションを使用します。このオプションを指定すると、セットアップ プログラムは Aspnet_regiis.exe の -ir オプションを使用し、スクリプト マップの自動更新、既定のドキュメント作成、および MIME スワッピングの手順がスキップされます。構文は次のコマンドのとおりです。

Dotnetfx.exe /c:"install /noaspupgrade"

スクリプト マップの手動による更新

アプリケーションのスクリプト マップを手動でセットアップすることが必要な場合もあります。インストールする .NET Framework のバージョンをターゲットとする専用の仮想ディレクトリがアプリケーションに必要な場合は、アプリケーションのセットアップ プログラムが明示的に -s オプションまたは -sn オプションを指定して Aspnet_regiis.exe を呼び出し、スクリプト マップを設定することを確認します。

SampleApp1 アプリケーションのスクリプト マップを更新するコマンド ラインの例を次に示します。

Aspnet_regiis.exe -s W3SVC/1/ROOT/SampleApp1

詳細については、「ASP.NET IIS 登録ツール (Aspnet_regiis.exe)」を参照してください。

.NET Framework アセンブリ統合

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

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

.NET Framework の異なるバージョンで構築されたコンポーネントを使用するアプリケーションで、同じアセンブリの異なるバージョンを使用できるようにするには、アプリケーションに関連付けられている .NET Framework アセンブリのバージョンが、アプリケーションおよびそのすべてのコンポーネントが使用するバージョンを決定します。この例では、アプリケーションが .NET Framework Version 2.0 に割り当てられている場合は、System.Data アセンブリの Version 2.0 が読み込まれ、アプリケーションを構成するすべてのコンポーネントによって共有されます。コンポーネント A から System.Data アセンブリの Version 1.1 への参照は、実行時に Version 2.0 への参照に昇格されます。

特定のアセンブリの更新版を入手した場合、アプリケーションが割り当てられている .NET Framework のバージョンに関係なく、アプリケーションをアセンブリに関連付けることができます。そのためには、Machine.config ファイルまたは Web.config ファイルに <bindingRedirect> の要素を追加します。これらの要素は、アプリケーションを更新版のアセンブリに関連付けて、特定の種類のアプリケーションの既存のアセンブリを置き換えます。たとえば、SOAP Version 1.2 をサポートする更新版の System.Web.Service.dll が将来リリースされた場合、.NET Framework と共にインストールされた元のバージョンの代わりに、アプリケーションでこのバージョンを使用できます。

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

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

アプリケーションの作成時よりも後のバージョンの .NET Framework で作成されたコンポーネントを使用する場合は、次の点を考慮してください。

  • コンポーネントが、.NET Framework の後のバージョンに固有の機能を使用したり、固有の動作に依存したりしないことを確認します。これらの機能は、ランタイムの旧バージョンでは利用できない可能性があります。

  • ASP.NET は IIS のスクリプト マップを使用して、アプリケーションをランタイムのバージョンにバインドします。構成要素 <supportedRuntime><requiredRuntime> は、ASP.NET アプリケーションには使用できません。

別の方法として、コンポーネントの作成に使用したランタイム バージョンがコンピュータにインストールされている場合は、後のランタイム バージョンを使用するようにアプリケーションを再構成できます。.NET Framework の後のバージョンには一般に下位互換性があるため、アプリケーションのほとんどの機能は、多少の変更によって動作させることができます。ただし、.NET Framework の新しいバージョンによってアプリケーションを実行する場合は、アプリケーションにエラーが発生しないことを十分にテストして確認してください。

ページのトップへ

コード例

"方法" トピックと "チュートリアル" トピック

ページのトップへ

クラス リファレンス

ページのトップへ

その他のリソース

ページのトップへ

新機能

ページのトップへ

参照

参照

ページのトップへ

その他の技術情報

side-by-side 実行