8

我有一个 Wpf .net 4.0 C# 项目,我试图从使用 Log4Net 迁移到使用 NLog 作为 Common.Logging Faç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, Version=2.0.1.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c' 加载类型 'NLog.TargetWithLayout'。”:“NLog.TargetWithLayout”}

有没有人克服这个问题或有解决办法NLog working with Common.Logging

为了不张贴长时间的问题,我没有包含该NLog.config文件,但如果它是有益的,我可以。

4

2 回答 2

15

在我问了这个问题之后环顾四周,在我问这个问题之前我做了很多搜索。我求助于尝试各种各样的东西,并希望它们能奏效。

我发现Common.Logging.NLog.NLogLoggerFactoryAdapter我正在使用的是来自Common.Logging.Nlogdll 并且该 dll 具有NLog 1.0.0.505使用该类的旧位置的引用NLog.TargetWithLayout

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

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

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

我希望这可以帮助任何偶然发现这个问题的人。我找不到其他人记录如何处理它。

于 2013-05-28T01:59:57.073 回答
2

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

于 2013-08-27T13:43:21.353 回答