System.IO.FileLoadException:无法加载文件或程序集Log4net

我在解决方案中添加了一个现有项目。 当我使用MSTest运行程序运行所有unit testing时,我在几个测试中得到以下错误:

消息:测试方法soandso引发exception:System.IO.FileLoadException:无法加载文件或程序集’log4net,版本1.2.12.0,Culture = neutral,PublicKeyToken = 669e0ddf0bb1aa2a’或其中一个依赖项。 定位的程序集的清单定义与程序集引用不匹配。 (HRESULTexception:0x80131040)

我知道其他人也有同样的问题,关于这个话题还有其他问题和答案。 但我尝试了很多东西,但没有任何帮助。 我们使用的log4net版本是1.2.13.0。

我检查了FUSLOGVW.exe是否存在绑定错误。 log4net显示添加的程序集和一些未知程序集。 程序集中log4net的引用显示了随NuGet添加的1.2.13.0版本。 所以它可能是一个依赖程序集导致所有这些麻烦。 我尝试将log4net更改回版本1.2.12.0,但我仍然收到相同的错误消息。

当我使用MSTest testrunner运行所有测试时,会出现这些错误。 当我只运行失败的测试时,它们会通过。 当我单独运行它们时,它们也会通过。 我尝试了绑定重定向,但我是为测试而不是测试程序集的程序集做的。 我不知道如何为测试程序集做到这一点 – 没有配置。 当我使用Resharper测试运行器运行测试时,它们也会通过(但其他测试失败)。 TFS Build服务器运行MSTest-runner,因此我需要使用MSTest。

有谁知道如何解决这个问题?

找到了罪魁祸首。 就像我怀疑的那样,依赖程序集引用了log4net 1.2.12.0。 用于找出的工具是dotPeek。 幸运的是,我们确实拥有依赖程序集的源代码,我们可以将其更改为引用最新的log4net。 这解决了这个问题。

因此,如果有人遇到类似问题,请使用dotPeek或类似工具浏览依赖程序集,以找出它引用的程序集版本。