xUnit在Jenkins下失败:BadImageFormatException
问题描述:
xUnit测试在Jenkins下运行。xUnit在Jenkins下失败:BadImageFormatException
我运行x86/x64 Debug/Release配置的测试。 在Jenkins下运行时,某些配置失败,并显示错误。
运行命令和错误信息如下:
packages\xunit.runner.console.2.1.0\tools\xunit.console.exe bin\x86\Release\MyDllName.dll -verbose -parallel none -diagnostics
xUnit.net Console Runner (64-bit .NET 4.0.30319.42000)
System.BadImageFormatException: Could not load file or assembly 'MyDllName, Version=1.3.549.4300, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.
<Absolute-path-to-file>\RunTests.1.proj(59,5): error MSB3073: The command "packages\xunit.runner.console.2.1.0\tools\xunit.console.exe bin\x86\Release\MyDllName.dll -verbose -parallel none -diagnostics" exited with code 1.
当我运行命令行相同的批处理文件,因为我用它来运行詹金斯工作,一切工作正常。
我试图将Jenkins作为服务运行并作为独立应用程序运行。我在两种情况下都出错了。
我试图在此DLL上运行ILSpy
并没有发现一些关于缺失依赖关系的错误消息。
如何使xUnit
在Jenkins下的所有配置下成功运行?
我的dll使用.NET 4.6.1构建。
Jenkins版本:2.32.1,但我有与旧版本相同的问题。
服务器操作系统:Windows 2008 R2 Enterprise。
xunit.runner.console:2.1.0
答
这可能是由于所讨论的DLL具有32位的bitted约束。
您需要或者
a。运行32位转轮(如果例如一些DEP需要32位DLL),
或
湾建立AnyCpu测试组件(但使用“首选32位”标志)[或x64]
我想知道为什么只有詹金斯下再现的错误?如果我从命令行运行相同的脚本,那没问题。 x86 /发布工作正常(在大多数时间:) - 我需要尚未调查时)。 x86/Debug总是产生错误 – sergtk
@sergtk在问题中有几个特定的Jenkins(甚至是xUnit) - 这是一个低级的.NET问题 - 一个说“我必须在x86进程中”的DLL和.NET告诉所有和各种各样的“好,我恐怕这已经是一个x64过程,所以改变你的过程或改变你的过程”。在Debug和Release版本之间有设置变化(AnyCpu与否)的可能性(settigng是配置特定的) –
运行xunit.console.x86.exe解决的问题。我不明白为什么xunit.console.exe在Jenkins下不能用于x64,但无论如何,问题都解决了! – sergtk