C# · 12月 23, 2021

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

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

Message: Test method soandso threw exception:
System.IO.FileLoadException: Could not load file or assembly ‘log4net,Version 1.2.12.0,Culture=neutral,PublicKeyToken=669e0ddf0bb1aa2a’ or one of it’s dependencies. The located assembly’s manifest deFinition does not match the assembly reference. (Exception from HRESULT: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或类似工具浏览依赖程序集,以找出它引用的程序集版本.