为什么部分顺序在app.config中很重要

时间:2013-06-12 19:20:57

标签: c# app-config

我最近将log4net添加到了我的应用程序中。令我感到奇怪的是,我必须在<configSections>标记块之前设置<startup>标记块。如果我不这样做,我最终在我做的第一个db调用上得到一个非常奇怪的异常。我假设这是有原因的,但它似乎很奇怪。

这是工作示例:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>


  <log4net debug="false">
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <param name="File" value="Logs\log.txt"/>
      <param name="AppendToFile" value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n"/>-->
        <conversionPattern value="%date - %-5level- %message%newline" />
      </layout>
    </appender>
    <root>
      <priority value="ALL"/>
      <appender-ref ref="LogFileAppender"/>
    </root>
    <category name="testApp.LoggingExample">
      <priority value="ALL"/>
    </category>
  </log4net>

1 个答案:

答案 0 :(得分:3)

部分的顺序一般无关紧要,只有 configSections 元素必须是第一个。

From MSDN

  

如果 configSections 元素位于配置文件中, configSections 元素必须是配置元素的第一个子元素。

我认为这是因为在使用之前需要声明部分。