2017-01-29 48 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