2017-01-29 40 views
1

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

回答

1

这可能是由于所讨论的DLL具有32位的bitted约束。

您需要或者

a。运行32位转轮(如果例如一些DEP需要32位DLL),

湾建立AnyCpu测试组件(但使用“首选32位”标志)[或x64]

See lots more similar cases in this answer

+0

我想知道为什么只有詹金斯下再现的错误?如果我从命令行运行相同的脚本,那没问题。 x86 /发布工作正常(在大多数时间:) - 我需要尚未调查时)。 x86/Debug总是产生错误 – sergtk

+1

@sergtk在问题中有几个特定的​​Jenkins(甚至是xUnit) - 这是一个低级的.NET问题 - 一个说“我必须在x86进程中”的DLL和.NET告诉所有和各种各样的“好,我恐怕这已经是一个x64过程,所以改变你的过程或改变你的过程”。在Debug和Release版本之间有设置变化(AnyCpu与否)的可能性(settigng是配置特定的) –

+0

运行xunit.console.x86.exe解决的问题。我不明白为什么xunit.console.exe在Jenkins下不能用于x64,但无论如何,问题都解决了! – sergtk