NLog给出异常可能的解释是缺少零个arg和单个arg Common.Logging.Configuration.NameValueCollection构造函数 [英] NLog giving exception Possible explanation is lack of zero arg and single arg Common.Logging.Configuration.NameValueCollection constructors

查看:167
本文介绍了NLog给出异常可能的解释是缺少零个arg和单个arg Common.Logging.Configuration.NameValueCollection构造函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将NLog添加到了我的应用程序和测试项目中.两者都属于同一解决方案.在应用程序内部,NLog可以工作.但是从测试项目中得到以下异常:

I added NLog to my application and the test project for it. Both of them part of the same solution. From inside the application NLog works. But from test project get below exception:

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配置如下:

My NLog configuration is below:

    <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.config file

<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>

推荐答案

当我仔细观察时,发现一个内部异常,抱怨找不到nlog 2.0.0 dll.找到了如下解决方案

When I took a closer look there was an inner exception which complained an nlog 2.0.0 dll was not found. Found a solution as follows

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

  1. Delete all packages related to nlog and commons logging restart application. If the packages don't get deleted by nuget edit .csproj file and .packages file manually to remove all references to Commons logging or nlog packages.
  2. Then searched for latest nlog package as by entering Common.Logging.Nlog in search text box. Then pick the latest nlog package and it will install all other needed packages for using using nlog through commons logging as a dependency. As shown below:
  3. In your web.config update your factory adapter element In my case i selected 31 so updated it to

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

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

P.S.如果出现错误The configuration section cannot contain a CDATA or text element.,则问题必须出在配置文件中.

P.S. If you are getting error The configuration section cannot contain a CDATA or text element. Then the problem has to be a type in your config file.

这篇关于NLog给出异常可能的解释是缺少零个arg和单个arg Common.Logging.Configuration.NameValueCollection构造函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆