在构建服务器上运行单元测试时发生BadImageFormatException 为什么在ReSharper中测试不会失败?

在具有anycpu体系结构的项目中,我有一套NUnit测试。其中一些测试使用来自x86(32位)程序集的类型。

当我在本地运行测试(通过ReSharper)时,它们全部通过。

但是,在使用nunit3-console MyProject.csproj命令在Jenkins上执行它们时,引用32位程序集的测试会因BadImageFormatException而失败:

System.BadImageFormatException : Could not load file or assembly '...' or one of its dependencies. An attempt was made to load a program with an incorrect format.

如何让他们通过?

jasoncarbonfree 回答:在构建服务器上运行单元测试时发生BadImageFormatException 为什么在ReSharper中测试不会失败?

nunit3-console MyProject.csproj默认在64位进程中运行测试,这使得无法加载32位程序集。这与构建服务器无关,因此在TeamCity等上也会发生同样的事情。

解决方案是通过添加适当的标志nunit3-console MyProject.csproj --x86来强制运行程序使用32位进程。

运行dotnet xunit -x86可以解决xUnit的类似问题。

我认为对于dotnet test,命令dotnet test --runtime win10-x86(带有适当的系统标志)会有所帮助。

为什么在ReSharper中测试不会失败?

ReSharper测试运行程序默认情况下会自动选择过程的“偏误”。我可能不知道,它可能会分析测试文件中的程序集引用。无论如何,就我而言,它是为单元测试选择32位运行程序。当我强迫它使用64位(单元测试会话->选项->平台-> x64)时,一些测试失败,并显示与Jenkins相同的消息。

本文链接:https://www.f2er.com/3095911.html

大家都在问