ASP.NET 構成ファイルの形式

ASP.NET リソースの構成情報は、複数の構成ファイル (すべて名前は Web.config) から成るコレクションに保持されています。それぞれの構成ファイルには、構成設定を指定する属性を持つ XML タグおよびサブタグの入れ子にされた階層が含まれています。タグは整形式の XML である必要があるため、タグ、サブタグ、および属性では大文字と小文字が区別されます。タグ名および属性名は Camel 形式、つまりタグ名の先頭は小文字で、その後に連結された単語の先頭は大文字となるように表記します。属性値は Pascal 形式、つまり属性値の先頭は大文字で、その後に連結された単語の先頭も大文字となるように表記します。truefalse は例外で、どちらも常に小文字で表記します。

すべての構成情報は、ルート XML タグの <configuration></configuration> の間に記述します。これらのタグ間にある構成情報は、構成セクション ハンドラ宣言領域と、構成セクション設定領域という 2 つの主な領域にグループ化されます。

構成セクション ハンドラ宣言は、構成ファイルの先頭に、<configSections> タグと </configSections> タグで囲んで記述します。<section> タグ内の各宣言は、構成データの特定のセットが記述されたセクションの名前と、そのセクションの構成データを処理する .NET Framework クラスの名前を指定します。

構成セクション設定領域は <configSections> 領域の後に配置し、実際の構成設定を記述します。<configSections> 領域の各宣言には、構成セクションが 1 つ対応します。各構成セクションには、そのセクションの設定を指定する属性を持つサブタグを記述します。

2 つの構成 <section> ハンドラを宣言する Web.config ファイルの例を次に示します。1 つはアプリケーション設定を制御し、もう 1 つはセッション状態を制御します。

<configuration>
   <configSections>
      <section name="appSettings"   
         type="System.Configuration.NameValueFileSectionHandler, 
         System, Version=1.0.3300.0, 
         Culture=neutral, PublicKeyToken=b77a5c561934e089"/>         
      <section name="sessionState" 
         type="System.Web.SessionState.SessionStateSectionHandler, 
         System.Web, Version=1.0.3300.0, Culture=neutral, 
         PublicKeyToken=b03f5f7f11d50a3a" 
         allowDefinition="MachineToApplication"/>
   </configSections>

   <appSettings>
      <add key="dsn" value="localhost;uid=MyUserName;pwd=;"/>
      <add key="msmqserver" value="server\myqueue"/>
   </appSettings>
   
   <sessionState cookieless="true" timeout="10"/>
</configuration>

構成セクション ハンドラは、1 回だけ宣言します。この宣言は、サーバーのルートにある Machine.config ファイルか、または Web アプリケーション ファイルのある仮想ディレクトリの Web.config ファイルで行います。サブディレクトリにある構成ファイルは、親ディレクトリで宣言された構成ハンドラを自動的に継承します。詳細については、「構成の継承」を参照してください。

構成設定は、セクションをグループ化するタグの下で入れ子にして指定することが多くあります。最上位のセクション タグは、通常はこの構成設定の適用対象とする名前空間を表します。たとえば、最上位の <system.net> タグはネットワーク クラスに対する設定であることを表し、<system.web> タグは ASP.NET クラスに対する設定であることを表します。

タグを入れ子にして指定する例を次に示します。

<configuration>
   <configSections>
      <sectionGroup name="system.net">
         <section name="authenticationModules"
            type="System.Net.Configuration.NetAuthenticationModuleHandler, 
            System, Version=1.0.3300.0, Culture=neutral, 
            PublicKeyToken=b77a5c561934e089"/>                               
         <section name="webRequestModules" 
            type="System.Net.Configuration.WebRequestModuleHandler, 
            System, Version=1.0.3300.0, Culture=neutral,
            PublicKeyToken=b77a5c561934e089"/>
       </sectionGroup>

       <sectionGroup name="system.web">
          <section name="authorization" 
             type="System.Web.Configuration.AuthorizationConfigHandler, 
             System.Web, Version=1.0.3300.0, Culture=neutral, 
             PublicKeyToken=b03f5f7f11d50a3a"/>            
          <section name="sessionState" 
             type="System.Web.SessionState.SessionStateSectionHandler,
             System.Web, Version=1.0.3300.0, Culture=neutral,
             PublicKeyToken=b03f5f7f11d50a3a"
             allowDefinition="MachineToApplication"/>        
       </sectionGroup>
    </configSections>

   <system.net>
      <! — Net Class Settings would go here. -->
   </system.net>
   <system.web>
        <authorization>
            <allow users="*"/> <!-- Allow all users -->
            <!-- Allow or deny specific users.
            allow users="[comma separated list of users]"
                  roles="[comma separated list of roles]"/>
            <deny users="[comma separated list of users]"
                  roles="[comma separated list of roles]"/>
            -->
        </authorization>
        <sessionState 
            sqlConnectionString="data source=localhost;
               Integrated Security=SSPI;
               Initial Catalog=northwind"
            cookieless="false" 
            timeout="10"/>
   </system.web>
</configuration>

ASP.NET 構成インフラストラクチャは、インフラストラクチャがサポートする構成データについて、特定の型を想定していません。構成セクション ハンドラ クラスは、すべての Web.config データを処理します。.NET Framework に付属の定義済み構成セクション ハンドラを使用したり、カスタム構成データを処理するためのハンドラを独自に作成したりできます。

カスタム構成型を作成する方法については、「新しい構成セクションの作成」を参照してください。

参照

ASP.NET の構成 | アプリケーションの設定 | 新しい構成セクションの作成