尝试配置 log4net 时出现 TypeInitializationException

Avr*_*oel 2 c# wpf log4net log4net-configuration

我有一个 VS2015 解决方案,其中包含一个服务层,该服务层公开一组 WCF 服务,以及一个使用它们的 WPF 客户端。我已经配置了 log4net 并且在服务层工作正常

我现在想在客户端使用 log4net,因此添加了 log4net NuGet 包,并将节点从服务层的配置文件复制到客户端的 App.config 文件中。完整的文件看起来像这样......

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

<configuration>
  <startup>
    <supportedRuntime version="v4.0"
                      sku=".NETFramework,Version=v4.5.2" />
  </startup>

  <log4net>
    <appender name="RollingFileAppender"
              type="log4net.Appender.RollingFileAppender">
      <param name="File"
             value="PhysioDiary.log" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="2" />
      <maximumFileSize value="1MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-7level %logger - %message%newline%exception" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>

  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="LargeMessageBehavior">
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </endpointBehaviors>
    </behaviors>

    <bindings>
      <customBinding>
        <binding name="CustomBindingDefault"
                 closeTimeout="00:59:00"
                 openTimeout="00:59:00"
                 receiveTimeout="00:59:00"
                 sendTimeout="00:59:00">
          <binaryMessageEncoding>
            <readerQuotas maxDepth="6400"
                          maxStringContentLength="100000000"
                          maxArrayLength="2147483647" />
          </binaryMessageEncoding>
          <httpTransport maxBufferPoolSize="2147483647"
                         maxReceivedMessageSize="2147483647"
                         bypassProxyOnLocal="true"
                         keepAliveEnabled="false"
                         maxBufferSize="2147483647">
            <extendedProtectionPolicy policyEnforcement="Never" />
          </httpTransport>
        </binding>
      </customBinding>
    </bindings>

    <client>
      <endpoint address="http://localhost:5448/AppointmentsService.svc"
                behaviorConfiguration="LargeMessageBehavior"
                binding="customBinding"
                bindingConfiguration="CustomBindingDefault"
                contract="AppointmentsServiceReference.AppointmentsService"
                name="CustomBinding_AppointmentsService" />
      <!-- Other WCF services here, snipped for clarity -->
    </client>
  </system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)

即使在任何地方使用 log4net 之前,如果我现在尝试运行客户端,我会得到一个异常......

在PresentationFramework.dll中发生了“System.TypeInitializationException”类型的未处理异常

附加信息:“System.Windows.Application”的类型初始值设定项引发异常。

...客户端将无法启动。它不会破坏任何代码,因此我看不到堆栈跟踪,也看不到是否存在内部异常。

如果我注释掉节点的内容,但将空节点留在那里,我仍然会遇到异常,因此问题似乎不是节点的内容,也不是 RollingFileAppender 。

我检查了引用,两个项目都引用了 log4net v2.0.5,并且都没有任何其他 log4net 引用。这两个项目都使用 Ninject,尽管我不确定这是否相关,因为我没有在这两个项目中注入 log4net(但这就是下一步)。

这不是这个SO问题中报告的问题,因为我的配置文件没有appSettings或configSections。而且,启动节点始终是文件中的第一个,这从来没有引起问题。我确实尝试将其移到最后,但没有帮助。

有人知道为什么当我尝试将 log4net 添加到 WPF 客户端时它崩溃吗?

And*_*rew 5

我认为它需要使用配置部分注册一个类型 - 类似于: <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections>