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

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

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

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

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

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

     

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

我不知道我还能做些什么,但是我很沮丧,因为日志库阻止了我的应用程序运行。

我错过了什么?

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

您可以从apache log4net站点获取“oldkey”版本。 只需从项目文件中获取您的引用,然后引用oldkey版本。

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

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

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

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

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