每个配置文件只允许一个 configSections 元素,如果存在,则必须是根配置元素的第一个子元素

Posted

技术标签:

【中文标题】每个配置文件只允许一个 configSections 元素,如果存在,则必须是根配置元素的第一个子元素【英文标题】:Only one configSections element allowed per config file and if present must be the first child of the root configuration element 【发布时间】:2012-11-17 09:57:57 【问题描述】:

我正在开发控制台应用程序,当我运行 .exe 文件时,我收到以下错误:

system.Configuration.ConfigurationErrorsException:每个配置文件只允许一个 <configSections> 元素,如果存在,则必须是根 <configuration> 元素的第一个子元素。

这是我的App.config 文件:

<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0"/>
    </startup>
    <configSections>
        <section name="Reva.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
    <!-- ... -->

但是,如果我删除以下 startup 部分,那么它可以正常工作

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
</startup>

【问题讨论】:

在德语中,错误消息显示为“Pro Konfigurationsdatei ist nur ein -Element zulässig und muss, sofern vorhanden, das erste untergeordnete Element des Stamm--Elements sein。 ”(以防万一,有人在谷歌上搜索这个)。 【参考方案1】:

错误消息本身实际上详细说明了正确的修复:

configSections 必须是根元素的第一个子元素*:

*添加了重点

所以只需将configSections 移到顶部:

<configuration>
    <configSections>
        <section name="Reva.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0"/>
    </startup>
</configuration>

【讨论】:

今天我知道我应该阅读整个错误信息。谢谢。 @AtronSeige 我也是:P 我收到了相同的 Windows 服务错误消息,而 app.config 中甚至没有“”标签。 请将您的配置发布到 pastebin 并在此处链接 事实证明,我的配置没问题,但该机器上的 machine.config 已损坏。它甚至包含一个 SQLExpress/localhost 连接字符串,尽管该机器上从未安装过 SQL。【参考方案2】:

错误 web.config 文件

 <?xml version="1.0" encoding="utf-8"?>   

<configuration>    
   <connectionStrings>   
      <add name="SQLConnect" 
           connectionString="Data Source=SAHIL; Initial Catalog=Demo; Integrated Security=SSPI" 
           providerName="System.Data.SqlClient" />   
   </connectionStrings>     

   <configSections>   
      <sectionnamesectionname="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, 
          Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
   </configSections>  

   :   
   :   
   :   
   :   
   :   
   :   
   :   
</configuration> 

错误是

为了修复错误,我重新排列了元素并修复了错误。

【讨论】:

以上是关于每个配置文件只允许一个 configSections 元素,如果存在,则必须是根配置元素的第一个子元素的主要内容,如果未能解决你的问题,请参考以下文章

ConfigSections配置

c# 配置文件之configSections配置

c# 配置文件之configSections配置(二)

FineUI配置文件

通过Web.config中的configSections配置自己系统的全局常量

配置部分'system.web / httpModules'已经定义。每个配置文件只能出现一次。请参阅帮助主题 例外