web-dev-qa-db-ja.com

applicationSettingsとWeb.config

WebFormsプロジェクトに使用するログを提供するDLLがあり、ASP.Net MVC2プロジェクトで使用したいと考えています。

そのDLLのいくつかの側面はapp.configで構成されています:

<configuration>
    <configSections>
            <section name="Tools.Instrumentation.Properties.Settings" 
                     type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
                     requirePermission="false" />
        </sectionGroup>
    </configSections>

 <applicationSettings>
        <Tools.Instrumentation.Properties.Settings>
            <setting name="LogLevel" serializeAs="String">
                <value>DEBUG</value>
            </setting>
            <setting name="AppName" serializeAs="String">
                <value>MyApp</value>
            </setting>
            <setting name="Port" serializeAs="String">
                <!--value>33333</value-->
                <value>0</value>
            </setting>
        </Tools.Instrumentation.Properties.Settings>
    </configuration>    

ただし、Web.configに同様のエントリを作成すると、次のエラーが発生します。

認識されない構成セクションapplicationSettings

私の2部構成の質問:

  • この設定エントリをWeb.configで機能させるにはどうすればよいですか?
  • WinForms構成とASP.Net構成の概念的な違いについてはどこで確認できますか?
20
Eric J.

構成ファイルにapplicationSettingsセクショングループがありませんでした。

<configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
        <section name="Tools.Instrumentation.Properties.Settings" 
                 type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
                 requirePermission="false" />
    </sectionGroup>
</configSections>

これを追加すると、設定セクションをタグ内に配置でき、アセンブリは通常どおりタグから読み取る必要があります。

56
xr280xr

欠落している構成の.NET4バージョンは次のとおりです。

<configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
        <section name="Tools.Instrumentation.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
</configSections>

<section>name属性値の名前空間を自分のものと一致するように更新してください。

5
Sam

セクションのname属性に注意してください。

<applicationSettings>ラッパーから要素を削除してみてください

   <Tools.Instrumentation.Properties.Settings>
        <setting name="LogLevel" serializeAs="String">
            <value>DEBUG</value>
        </setting>
        <setting name="AppName" serializeAs="String">
            <value>MyApp</value>
        </setting>
        <setting name="Port" serializeAs="String">
            <!--value>33333</value-->
            <value>0</value>
        </setting>
    </Tools.Instrumentation.Properties.Settings>

これで、セクションを使用できます。ただし、生成されたラッパークラスがないため、ConfigurationManagerを使用して値を取得するためにもう少し作業を行う必要があります。

質問の2番目の部分に関しては、1つの観点から、構成ファイルがWebアプリケーションとフォームアプリケーションによって処理される方法にほとんどまたはまったく違いはありません。

ここで関連する場合と関連しない場合がある1つの顕著な違いは、web.configファイルを階層的にマッピングする方法です。後続の各ファイルは、許可されている場合、親構成を効果的に拡張または変更します。しかし、私の意見では、これは機能的な違いではなく、行動上の違いです。

3
Sky Sanders