常见日志记录无法加载类型NLog.TargetWithLayout

时间:2013-05-27 04:30:32

标签: c# nlog common.logging

我有一个Wpf .net 4.0 C#项目,我试图从使用Log4Net迁移到使用NLog作为Common.LoggingFaçade后面的日志库。 我原本以为这是一件容易的事,但你知道他们说的是什么,没有什么比这更容易了。

我使用过NuGet:

  • 在版本2.0.1.2下载NLog。
  • 在版本2.0.0下载Common.Logging.NLog。
  • 在版本2.1.2下载Common.Logging.NLog20。
  • 使用NuGet更新了从2.0.0版到2.1.2版的常用日志记录。

在app.config文件中我有:

<common>
    <logging>
        <factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog">
            <arg key="configType" value="FILE" />
            <arg key="configFile" value="~/NLog.config" />
        </factoryAdapter>
    </logging>
</common>

......和......

  <dependentAssembly>
    <assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.1.0" newVersion="2.0.1.0" />
  </dependentAssembly>

当我运行应用程序时,我收到一条错误说明

'在类型'NameSpace.Shell.AppBootstrapper'上调用与指定绑定约束匹配的构造函数引发异常。行号'8'和行位置'18'。

内部例外是:

  

{“无法加载一个或多个请求的类型。检索   LoaderExceptions属性以获取更多信息。“}

说Loader异常,只有一个,就是:

  

{“无法从程序集'NLog加载类型'NLog.TargetWithLayout',   版本= 2.0.1.0,文化=中立,   公钥= 5120e14c03d0593c”。 “:” NLog.TargetWithLayout“}

有没有人克服这个问题或者有工作来获得NLog working with Common.Logging

为了不发布长期问题,我没有包含NLog.config文件,但如果它有用,我可以。

2 个答案:

答案 0 :(得分:15)

在我问了这个问题之后很多人四处寻找,在我问这个问题之前我做了很多搜索。我尝试各种各样的东西,并希望它们可以工作。

我发现我正在使用的Common.Logging.NLog.NLogLoggerFactoryAdapter来自Common.Logging.Nlog dll,并且该dll对NLog 1.0.0.505有一个参考,它使用NLog.TargetWithLayout的旧位置{1}}课程。

我使用NuGet删除了Common.Logging.Nlog包,并将app.config文件中的引用更改为:

<factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog20">

然后使用NLog 2.0.1.2包中的正确类,允许NLog,并启动应用程序。

我希望这有助于其他任何偶然发现此问题的人。我找不到其他人记录如何处理它。

答案 1 :(得分:2)

可能你已经安装了Common.Logging.NLog NuGet包而不是Common.Logging.Nlog20。 检查你的nuget参考,因为CL的版本2和NLog的版本2,它可能会混淆。您显然拥有的是CL的第2版,但是NLog版本1的NLogLoggerFactoryAdapter。