我有一个Wpf .net 4.0 C#项目,我试图从使用Log4Net迁移到使用NLog作为Common.LoggingFaçade后面的日志库。 我原本以为这是一件容易的事,但你知道他们说的是什么,没有什么比这更容易了。
我使用过NuGet:
在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
文件,但如果它有用,我可以。
答案 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。