2017-01-29 24 views
1

xUnit тесты проходят под Jenkins.xUnit не работает под Jenkins: BadImageFormatException

Выполняю тесты для конфигураций отладки/выпуска x86/x64. Некоторая конфигурация не работает с ошибкой при работе под 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 работы, все отлично работают.

Я попытался запустить Дженкинс как сервис и как отдельное приложение. Я получил ошибку в обоих случаях.

Я попытался запустить ILSpy в этой DLL и не нашел сообщений об ошибках относительно отсутствующих зависимостей.

Как сделать xUnit успешно работать на всех конфигурациях под Jenkins?

Моя dll построена с .NET 4.6.1.
Версия Jenkins: 2.32.1, но у меня такие же проблемы со старыми версиями.
Сервер ОС: Windows 2008 R2 Enterprise.
xunit.runner.console: 2.1.0

ответ

1

Это, скорее всего, результат соответствующей DLL, связанной с 32-битным ограничением.

Вам необходимо либо

a. запустить 32-битный бегун (если, например, некоторые DEP требует 32-битный DLL),

или

б. построить тестовую сборку для AnyCPU (но с помощью «Предпочитают 32 бит» флаг) [или x64]

See lots more similar cases in this answer

+0

Я задаюсь вопросом, почему ошибка воспроизводится только под Дженкинс? Если я запускаю тот же скрипт из командной строки, это нормально. x86/Release работает отлично (в большинстве случаев :) - мне еще нужно выяснить, когда именно). x86/Debug всегда производит ошибку – sergtk

+1

@sergtk В этой проблеме есть мало Jenkins (или даже xUnit) - это проблема .NET на низком уровне - это DLL, которая говорит, что «I * must * должна быть в процессе x86», и .NET говорит все и все «хорошо, я боюсь, что это уже процесс x64, поэтому измените свой процесс или измените свой процесс». Скорее всего, у вас есть изменения в настройках (AnyCpu или нет) между сборками Debug и Release (для параметра settigng задано значение конфигурации) –

+0

Запуск проблемы с xunit.console.x86.exe. Я не понимаю всех деталей, почему xunit.console.exe не работал для x64 только у Jenkins, но в любом случае проблема решена! – sergtk