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

6
我将现有的项目添加到我的解决方案中。当我使用MSTest runner运行所有单元测试时,我在一些测试中收到以下错误:
消息:测试方法soandso引发异常: System.IO.FileLoadException: 无法加载文件或程序集'log4net,版本1.2.12.0,Culture=neutral,PublicKeyToken=669e0ddf0bb1aa2a'之一或其依赖项。所定位的程序集清单定义与程序集引用不匹配。(HRESULT的异常:0x80131040)
我知道其他人也遇到了同样的问题,并且有其他关于此主题的问题和答案。但是我尝试了很多方法,但没有帮助。 我们使用的log4net版本是1.2.13.0。
我使用FUSLOGVW.exe检查绑定错误。log4net显示为已添加的程序集和某些未知程序集。 程序集中对log4net的引用显示为已添加NuGet的1.2.13.0版本。因此,可能是导致所有这些问题的相关程序集。 我尝试将log4net更改回1.2.12.0版本,但仍然收到相同的错误消息。
当我使用MSTest testrunner运行所有测试时,会出现这些错误。当我只运行失败的测试时,它们会通过。当我单独运行它们时,它们也会通过。 我尝试了绑定重定向,但我是为被测试的程序集而不是测试程序集这样做的。我不知道如何针对测试程序集执行此操作 - 没有配置文件。 当我使用Resharper test runner运行测试时,它们也通过(但其他测试失败)。TFS Build服务器运行MSTest-runner,因此我需要使其与MSTest配合使用。
有人知道我如何解决这个问题吗?

尝试调查log4net的示例项目。 - NoWar
2
删除对log4net的引用,并添加对正确版本的log4net的新引用,或将引用的“Specific Version”属性更改为false。 - Hamlet Hakobyan
那是我尝试的第一件事之一。我尝试过1.2.13.0、1.2.12.0以及带有旧签名的log4net 1.2.13.0。Specific Version属性设置为false。 - tobre
1个回答

11

罪魁祸首已经找到。正如我怀疑的那样,一个依赖程序集在引用log4net 1.2.12.0。查找工具是dotPeek。幸运的是,我们有依赖程序集的源代码,可以将其更改为引用最新的log4net。这解决了这个问题。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接