У меня есть C ++ / CLI DLL, которая использует некоторые C ++ DLL (обе созданы для 32-битных). Я хочу проверить это в C # DLL с помощью NUNit 2.5.8.10295 (изменение на 2.6.4 не изменило результат)
Я использую командный файл, который в итоге расширяется до этого:
nunit-console-x86.exe "someUnitTests.dll" /framework=4.0.30319 /xml=NUnitResult_someUnitTests.xml
С помощью этой команды на моем компьютере для разработки (64-разрядная версия Win 10 Enterprise Visual Studio 2013) тесты выполняются нормально. При запуске nunit-console-x86.exe из Visual Studio Professional 2013 и установке рабочего каталога в выходную папку двух DLL-файлов он также работает нормально.
При выполнении на сервере сборки (Jenkins работает на Windows Server 2012 R2) тест завершается с этим сообщением:
SetUp : System.IO.FileLoadException : Could not load file or assembly 'some.DLL' or one of its dependencies. A dynamic link library (DLL) initialization routine failed. (Exception from HRESULT: 0x8007045A)
Я попытался сравнить установленные фреймворки и среды выполнения на обеих машинах (не вижу очевидных больших различий), за исключением сервера сборки, использующего VS 2013 Express. Я также экспериментировал с SysInternals ProcessMonitor, но безуспешно. Вывод зависимости ходунка я не понимаю.
Любые советы по технике или инструментам для использования?
Обновить:
Если я добавлю / noshadow, он больше не будет работать на моем ПК для разработки. В Visual Studio происходит сбой nunit-console-x86, а в командной строке выдается то же сообщение, что и на сервере сборки. В то время как там не имеет значения, запускается ли с / без / noshadow
При более внимательном рассмотрении на тестовом ПК с Windows 7 без Visual Studio, но с vc_redist 2013: с включенным теневым копированием (= без / noshadow) я получаю следующее:
SetUp : System.IO.FileNotFoundException : Could not load file or assembly 'some.DLL' or one of its dependencies. The specified module could not be found.
С / noshadow ошибка превращается в BadImageFormatException
NUnit 2.x теневые копии по умолчанию копируют файлы, но теневое копирование не копирует собственные сборки. Я считаю, что он работает в Visual Studio для вас, потому что вы устанавливаете рабочий каталог.
Чтобы отключить теневое копирование в NUnit, передайте /noshadow
опция командной строки.
Кроме того, стандартное поведение в NUnit 3 — не теневое копирование.
В конце концов мне удалось уменьшить сложность, создав консольное приложение без NUNit, столкнувшись с похожими проблемами и исправив их. Увидеть Консольное приложение x86 не работает на 64-битных машинах, кроме как в отладчике для деталей.