14

在过去的 2 个小时里,我一直在研究 SO 上的这些问题,但似乎没有任何效果。

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

未处理的异常:System.IO.FileLoadException:无法加载文件或程序集“log4net,版本=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

4 回答 4

6

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

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

于 2012-12-19T01:04:38.030 回答
4

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

于 2012-11-30T00:00:38.623 回答
3

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

于 2012-10-25T04:18:55.137 回答
3

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

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

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

于 2013-05-16T20:30:28.127 回答