applicationSettings和Web.config

时间:2010-05-25 16:14:14

标签: asp.net web-config

我有一个DLL,它提供了我用于WebForms项目的日志记录,现在希望在ASP.Net MVC 2项目中使用它。

该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

我的两部分问题:

  • 如何在Web.config
  • 中使此配置条目有效
  • 我在哪里可以阅读WinForms配置和ASP.Net配置之间的概念差异?

3 个答案:

答案 0 :(得分:54)

您的配置文件刚刚缺少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>

如果你添加它,你可以将你的设置部分放在标签内,你的组件应该正常读取它。

答案 1 :(得分:4)

这是缺少配置的.NET 4版本:

<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>的{​​{1}}属性值的命名空间以匹配您自己的名称空间。

答案 2 :(得分:3)

请注意该部分的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来获取你的值。

关于问题的第二部分,从一个角度来看,Web应用程序与表单应用程序处理配置文件的方式几乎没有区别。

这里可能相关或不相关的一个显着差异是web.config文件可以被层次映射的方式,每个后续文件在允许时有效地扩充或修改父配置。但在我看来,这更像是一种行为差异而不是功能差异。