【问题标题】:NLog giving exception Possible explanation is lack of zero arg and single arg Common.Logging.Configuration.NameValueCollection constructorsNLog 给出异常可能的解释是缺少零参数和单个参数 Common.Logging.Configuration.NameValueCollection 构造函数
【发布时间】:2014-12-10 16:30:43
【问题描述】:

我将 NLog 添加到我的应用程序和它的测试项目中。它们都是同一解决方案的一部分。从应用程序内部 NLog 工作。但是从测试项目中得到以下异常:

Unable to create instance of type Common.Logging.NLog.NLogLoggerFactoryAdapter. Possible explanation is lack of zero arg and single arg Common.Logging.Configuration.NameValueCollection constructors

我的 NLog 配置如下:

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-2.1.2.0" newVersion="2.1.2.0" />
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>    
    <common>
            <logging>
              <factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog20">
                <arg key="configType" value="INLINE" />
              </factoryAdapter>
            </logging>
          </common>
          <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" internalLogFile="C:\git\foo\logs\nlog.log" internalLogLevel="Warn">
            <extensions>
              <add assembly="NLog.RollbarSharp" />
            </extensions>
            <targets>
              <target xsi:type="RollbarSharp" name="Rollbar" />
              <target xsi:type="File" name="FileLog" layout="${date:format=yyyy-MM-dd HH\:mm\:ss}|${level:uppercase=true}|${logger}|${message}${onexception:${exception:format=tostring}}" encoding="iso-8859-2" fileName="C:\git\foo\logs\foo-${shortdate}.log" archiveFileName="C:\git\foo\logs\archives\foo-${shortdate}.{#####}.log" archiveAboveSize="5000000" archiveNumbering="Sequence" concurrentWrites="true" keepFileOpen="false" />
            </targets>
            <rules>
              <logger name="*" minLevel="Trace" writeTo="FileLog" />
              <logger name="*" minLevel="Error" writeTo="Rollbar" />
            </rules>
          </nlog>

packages.config 文件

<packages>
  <package id="Common.Logging" version="2.3.1" targetFramework="net45" />
  <package id="Common.Logging.NLog20" version="2.3.1" targetFramework="net45" />
  <package id="NLog" version="3.1.0.0" targetFramework="net45" />
  <package id="NLog.RollbarSharp" version="0.1.2.0" targetFramework="net45" />
  <package id="RollbarSharp" version="0.3.1.0" targetFramework="net45" />
</packages>

【问题讨论】:

    标签: c# logging nuget nlog apache-commons-logging


    【解决方案1】:

    当我仔细查看时,有一个内部异常抱怨未找到 nlog 2.0.0 dll。找到如下解决方案

    1. 删除所有与 nlog 和 commons 日志重启应用程序相关的包。如果包没有被 nuget 删除,请手动编辑 .csproj 文件和 .packages 文件以删除对 Commons 日志记录或 nlog 包的所有引用。
    2. 然后通过在搜索文本框中输入Common.Logging.Nlog 来搜索最新的nlog 包。然后选择最新的 nlog 包,它将安装所有其他需要的包,以便通过公共日志记录作为依赖项使用 nlog。如下所示:
    3. 在您的web.config 中更新您的工厂适配器元素在我的情况下,我选择了 31,因此将其更新为

      <factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog31"> <arg key="configType" value="INLINE" /> </factoryAdapter>

    附:如果您收到错误The configuration section cannot contain a CDATA or text element.,那么问题必须是您的配置文件中的一个类型。

    【讨论】:

      【解决方案2】:

      将我的 Common.Logging 和 NLog 配置从一个网站移动到另一个网站后,我遇到了这个错误。我错过了 web.config 的程序集绑定部分的“dependentAssembly”块:

      <assemblyBinding>
        ...
        <dependentAssembly>
          <assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-3.2.1.0" newVersion="3.2.1.0" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="Common.Logging.Core" publicKeyToken="af08829b84f0328e" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
        </dependentAssembly>
      </assemblyBinding>
      

      添加以防万一这有助于其他人和我有同样问题的人!

      【讨论】:

        【解决方案3】:

        我以不同的方式解决了同样的错误。

        返回异常信息:

        ConfigurationErrorsException: Unrecognized element 'add2'.
        

        此项目出错:

        <add2 key="CommentsButtonEnd" value="]/button"/>
        

        解决方案是:删除数字 2,因为 add2 不是有效的配置键

        <add key="CommentsButtonEnd" value="]/button"/>
        

        添加以防有人和我有同样的错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-05
          • 2017-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多