在具有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.
如何让他们通过?
答案 0 :(得分:0)
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测试运行程序默认情况下会自动选择过程的“偏误”。我可能不知道,它可能会分析测试文件中的程序集引用。无论如何,就我而言,它是为单元测试选择32位运行程序。当我强迫它使用64位(单元测试会话->选项->平台-> x64)时,一些测试失败,并显示与Jenkins相同的消息。