关于log4net 1.2.11的另一个问题是冲突

时间:2012-05-02 15:55:40

标签: c# log4net gac

我花了最后2个小时在SO上查看这些问题,似乎没有任何工作。

我有一个使用log4net 1.2.11的解决方案,通过NuGet。它在我运行Windows 7的32位开发工作站上运行良好。它不能在我的64位Windows 2008 R2测试系统上运行。我得到的错误是:

  

未处理的异常:System.IO.FileLoadException:无法加载文件或程序集'log4net,Version = 1.2.11.0,Culture = neutral,PublicKeyToken = 669e0ddf0bb1aa2a'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。

我正在查看测试系统上的应用程序目录。 log4net.dll文件的版本为1.2.11。

GAC中的版本是1.2.10版。我删除了它。我的开发服务器上有一个版本,还有其他东西;我也删除了它。我重建了;我已经重新部署了。我添加了

<dependentAssembly>
    <assemblyIdentity name="log4net" publicKeyToken="669E0DDF0BB1AA2A" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-1.2.10.0" newVersion="1.2.11.0"/>
</dependentAssembly>

到我的配置文件。似乎没有什么区别。我的部署项目显示正在部署的log4net程序集的正确版本和签名。

我不知道我还能做些什么,但是我很惊讶日志记录库阻止我的应用程序运行。

我错过了什么?

4 个答案:

答案 0 :(得分:6)

我在通过NuGet升级log4net之后遇到了这个问题,却发现较新的版本是用不同的密钥签名的。叹。出于某种原因,当我部署到实时服务器时,这种情况才变得明显,它在开发过程中没有出现。

您可以从the apache log4net site获取'oldkey'版本。只需从项目文件中查找引用并改为引用oldkey版本。

答案 1 :(得分:4)

这是我的解决方案:我从log4net更改为Common.Logging到NLog。它没有花费太多精力,我认为它不应该是必要的,但它起作用,并且效果很好。

答案 2 :(得分:3)

我们遇到了完全相同的问题。深入代码库的依赖是将1.2.10放入GAC,而NuGet正在尝试使用1.2.11。我们放弃了使用NuGet for log4net,太过头痛了。似乎NuGet有点全有或全无。

答案 3 :(得分:3)

有时您必须深入了解项目依赖项。在我的例子中,它是对引用不同版本的Log4Net的实际服务堆栈项目的引用的引用。

为了解决这个问题,我将最新版本的Log4Net从nuget添加到ServiceStack项目中。我还确保直接引用使用的是最新版本,这解决了这个问题。

您可以使用依赖工具快速查找哪些引用正在使用冲突版本,但是如果您没有此工具,则可以自行编译项目的引用,并查看将log4net.dll的哪个版本复制到目录。