Share via


ASP.NET 構成ファイルの階層と継承

更新 : 2007 年 11 月

アプリケーション ディレクトリ全体に ASP.NET 構成ファイルを配布することで、継承階層内の ASP.NET アプリケーションを構成できます。こうした構造により、上位のディレクトリ レベルの構成設定に影響することなく、適切なディレクトリ レベルでアプリケーションが必要とする詳細レベルの構成を実現できます。

このトピックは、次の内容で構成されています。

  • 構成の構造

  • 構成の継承

  • 構成設定のスコープ

  • 実行時の構成設定の計算

  • 単一ファイル内で構成された複数の ASP.NET リソース

  • 仮想パスの設定と物理パスの設定の競合

  • ASP.NET の継承の制限

構成の構造

ASP.NET 構成ファイルの名前は Web.config です。これらのファイルは、ASP.NET アプリケーション内の複数のディレクトリに含めることができます。ASP.NET 構成階層は次の特性を持ちます。

  • 構成ファイルを使用します。構成ファイルは、それが位置するディレクトリ内のリソースとすべての子ディレクトリに適用されます。

  • 適切なスコープ (コンピュータ全体、すべての Web アプリケーション、個別のアプリケーション、またはアプリケーションのサブディレクトリ) を持つ場所に構成データを配置できます。

  • 構成階層内の上位レベルから継承される構成設定をオーバーライドできます。また構成設定をロックし、下位レベルでの構成設定によるオーバーライドを阻止できます。

  • 構成設定の論理グループをセクションに整理します。

構成の継承

すべての .NET Framework アプリケーションは、systemroot\Microsoft .NET\Framework\versionNumber\CONFIG\Machine.config ファイルから基本構成設定と既定の設定を継承します。Machine.config ファイルは、サーバー全体の構成設定のために使用されます。これらの設定の一部は、階層内の下位の構成ファイルでオーバーライドできません。

.NET クライアント アプリケーション (コンソール アプリケーションおよび Windows アプリケーション) は、ApplicationName.config という構成ファイルを使用して、継承した設定をオーバーライドします。ASP.NET アプリケーションは、Web.config という構成ファイルを使用して、継承した設定をオーバーライドします。

ASP.NET 構成階層のルートは、ルートの Web.config ファイルと呼ばれるファイルで、Machine.config ファイルと同じディレクトリに配置されています。ルートの Web.config ファイルは、Machine.config ファイル内のすべての設定を継承します。ルートの Web.config ファイルには、特定のバージョンの .NET Framework を実行するすべての ASP.NET アプリケーションに適用される設定が含まれます。各 ASP.NET アプリケーションはルートの Web.config ファイルから既定の構成設定を継承するので、既定の設定をオーバーライドする設定に対してのみ Web.config ファイルを作成する必要があります。

コレクション要素内での継承

namespaces 要素や customErrors 要素など、いくつかの構成要素はコレクションです。

コレクションでは、通常、構成設定が add 子要素によってコレクションへの追加されたり、remove 子要素によってキー名ごとに削除されたりします。または clear 子要素によってコレクション全体を削除できます。子構成ファイルの追加設定は、重複が許可されない限り、親構成ファイルの同じキー名の設定をオーバーライドします。

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

.NET Framework の以前のバージョンの一部のコレクションでは、add 子要素に異なる要素名を使用しています。たとえば、customErrors 要素では、error 子要素を使用して、コレクションにカスタム エラーを追加します。

SubDir1 ディレクトリ内の存在しないファイルに対して要求を受信すると、ASP.NET は最もローカルな Web.config ファイル (現在のディレクトリの Web.config ファイル、現在のディレクトリに存在しない場合は親ディレクトリの Web.config ファイル) から構成階層の検索を開始します。また、statusCode 属性が "404" である customErrors の error 要素 (ASP.NET 設定スキーマ) 要素を検索します。ASP.NET が 404 エラーの構成設定を見つけると、redirect 属性の URL が応答として返されます。

構成設定のスコープ

構成設定にはさまざまなスコープがあります。一部の構成設定はグローバル スコープを持ちますが、アプリケーション、ルートの Web.config ファイル、または Machine.config ファイルのスコープにのみ適用される構成設定もあります。

構成セクションのスコープは、ASP.NET に含まれる全セクションについて、Machine.config ファイルの configSections の section 要素 (全般設定スキーマ) 要素の allowDefinition 属性で定義されています。たとえば、authentication 要素 (ASP.NET 設定スキーマ) 要素では、allowDefinition 属性が MachineToApplication 要素に設定されています。つまり、authentication 要素は Machine.config ファイル、ルートの Web.config ファイル、およびアプリケーション レベルの Web.config ファイルで設定できます。これをサブディレクトリ レベルで設定するとエラーがスローされます。セクションで allowDefinition 属性が定義されていない場合、既定値は Everywhere です。

構成設定のスコープは、ASP.NET 構成設定 および 全般構成設定 (ASP.NET) の各要素について [要素情報] の隣にある [要素情報] の一覧に表示されます。

構成階層内で各ファイルが配置されるレベル、ファイル名、および各ファイルの重要な継承特性の説明を次の表に示します。

構成レベル

ファイル名

ファイルの説明

サーバー

Machine.config

Machine.config ファイルには、サーバー上のすべての Web アプリケーションの ASP.NET スキーマが格納されています。このファイルは、構成結合階層の最上位に位置します。

ルート Web

Web.config

サーバーの Web.config ファイルは、Machine.config ファイルと同じディレクトリに格納され、大部分の system.web 構成セクションの既定値を含みます。実行時には、このファイルは構成階層内で最上位のレベルから次のレベルに結合されます。

Web サイト

Web.config

特定の Web サイトの Web.config ファイルには、その Web サイトに適用され、サイトのすべての ASP.NET アプリケーションとサブディレクトリの下位方向に継承される設定が含まれます。

ASP.NET アプリケーションのルート ディレクトリ

Web.config

特定の ASP.NET アプリケーションの Web.config ファイルは、アプリケーションのルート ディレクトリに位置し、Web アプリケーションに適用され、その分岐内のすべてのサブディレクトリの下位方向に継承される設定が含まれます。

ASP.NET アプリケーションのサブディレクトリ

Web.config

アプリケーション サブディレクトリの Web.config ファイルには、そのサブディレクトリに適用され、分岐内のすべてのサブディレクトリの下位方向に継承される設定が含まれます。

クライアント アプリケーションのディレクトリ

ApplicationName.config

ApplicationName.config ファイルには、(Web アプリケーションではなく) Windows クライアント アプリケーションの設定が含まれます。

ProcessModel 要素

processModel 要素 (ASP.NET 設定スキーマ) 要素は、サーバー上のすべての ASP.NET アプリケーションなどのサーバーで使用されるプロセス モデルを構成します。したがって processModel 設定は、Machine.config ファイルにのみ含めることができます。また、Web.config ファイル内の設定によりオーバーライドすることはできません。

processModel 要素への変更は、ワーカー プロセスの再起動時に有効になります。他の構成要素のように、設定を変更した直後に有効になるわけではありません。

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

ASP.NET がインターネット インフォメーション サービス (IIS : Internet Information Services) 6.0 のワーカー プロセス分離モードで実行している場合、IIS 6.0 のプロセス モデルが使用され、Machine.config ファイルの processModel セクションの設定は無視されます。プロセス ID、サイクル、または他のプロセス モデルの値を構成するには、IIS マネージャを使用して、アプリケーションの IIS ワーカー プロセスを構成します。IIS 6.0 を構成して IIS 5.0 分離モードで ASP.NET を実行する場合、ASP.NET 2.0 は実行しません。

実行時の構成設定の計算

サーバーが特定の Web リソースに対する要求を受け取ると、ASP.NET は要求された URL の仮想ディレクトリ パスにあるすべての構成ファイルを使用して、そのリソースの構成設定を階層的に計算します。ローカル構成設定は、親構成ファイル内の設定をオーバーライドします。

この設定は 1 回計算された後、以降の要求でキャッシュされます。ASP.NET はファイルの変更を自動的に監視し、ファイルの階層内で構成ファイルに変更があった場合に、キャッシュを再計算します。サーバーが特定の URL に対する要求を受け取ると、ASP.NET はキャッシュ内の構成設定階層を使用して、要求されたリソースを検索します。

構成セクション要素に restartOnExternalChanges="false" 属性が含まれている場合、または構成設定が configSource 属性により Web.config ファイルにリンクする個別のファイルに含まれている場合を除いて、構成が変更されるとアプリケーションが再起動されます。

単一ファイル内で構成された複数の ASP.NET リソース

多数の構成設定を管理する場合、または単一の ISP 設定でクライアント Web サイトを管理する場合に、多数の場所の設定を単一の Web.config ファイルに保存すると便利な場合があります。location 要素の path 属性を使用することにより、アプリケーションのサブディレクトリに保存されている多数の個別 ASP.NET リソースを構成できます。

location 要素の使用方法については、「方法 : Location の設定を使用して特定のディレクトリを構成する」を参照してください。

仮想ディレクトリの設定と物理ディレクトリの設定の競合

仮想ディレクトリの構成設定は物理ディレクトリ構造に依存しないため、仮想ディレクトリは構成に関する問題を生じないように慎重に編成する必要があります。たとえば、次に示すディレクトリ構造を持つ、MyResource.aspx という ASP.NET ファイルがあるとします。

C:
    \Subdir1
        \Subdir2
            \MyResource.aspx

また、Subdir1 に位置する構成ファイルと、c:\Subdir1 に対応付けられた Vdir1 という名前の仮想ディレクトリ、および c:\Subdir1\Subdir2 に対応付けられた Vdir2 という名前の仮想ディレクトリがあります。クライアントが https://localhost/vdir1/subdir2/MyResource.aspx という URL を使用して c:\Subdir1\Subdir2\MyResource.aspx の物理位置にあるリソースにアクセスすると、そのリソースは Vdir1 から構成設定を継承します。しかし、このクライアントが https://localhost/vdir2/MyResource.aspx という URL を使用して同じリソースにアクセスしても、このリソースは Vdir1 の構成設定を継承しません。このような方法で仮想ディレクトリを作成すると、予期しない結果が生じる場合があり、アプリケーション エラーが発生する場合もあります。仮想ディレクトリを入れ子にしないか、または入れ子にする場合でも 1 つの Web.config ファイルを使用することをお勧めします。

ASP.NET の継承の制限

アプリケーションのパフォーマンスの向上、高い信頼性の維持、管理の簡素化のために構成設定の継承を制限した方が良い場合があります。制限は、allowOverride、lockAttributes、lockAllAttributesExcept、lockAllElementsExcept、lockItem、および lockElements の各属性によって制御されます。これらの属性の詳細については、「セクションの要素によって継承される全般属性」を参照してください。

処理されない例外の構成設定

ASP.NET アプリケーションの作成中に、Aspnet.config ファイルに含まれる設定は、共通言語ランタイム (CLR: Common Language Runtime) で処理されます。この設定は、特に、CLR に対して処理されない例外の処理方法を指示します。対象の構成設定を次に示します。

<legacyUnhandledExceptionPolicy enabled="false" />

詳細については、「マネージ スレッドの例外」を参照してください。

参照

処理手順

方法 : Location の設定を使用して特定のディレクトリを構成する

方法 : ASP.NET 構成設定をロックする

参照

セクションの要素によって継承される全般属性