System.BadImageFormatException, вызванный проектом NUnit - PullRequest
17 голосов
/ 26 марта 2012

Добрый день всем. У меня была такая же проблема весь день на работе, и я изо всех сил пытаюсь найти какие-то новые пути, чтобы пойти вниз.

Я получаю следующую ошибку, когда мое решение построено на сервере. У меня нет проблем с запуском / отладкой всех тестов в решении, и оно прекрасно работает. И сервер, и мой компьютер x64. Я следовал многим советам, которые я нашел безрезультатно.

Я установил для Platform Target значение x86 для всех проектов в моем решении со всеми конфигурациями.

Мне известно, что существует файл nunit-console-x86.exe, который может все изменить, но я не уверен, где это указать в коде.

Пожалуйста, поймите, что я проследил за интернетом, поэтому извиняюсь, если что-то пропустил.

System.BadImageFormatException: не удалось загрузить файл или сборку
«Spin.TradingServices.DataAcquisition.Test.NUnit, Версия = 1.0.12103.2060, Культура = нейтральная, PublicKeyToken = null 'или единица его зависимостей. Была предпринята попытка загрузить программу с неверный формат.
Имя файла: «Spin.TradingServices.DataAcquisition.Test.NUnit, Версия = 1.0.12103.2060, Культура = нейтральная, PublicKeyToken = null '

Трассировка стека серверов: в System.Reflection.RuntimeAssembly._nLoad (AssemblyName fileName, Строка codeBase, Свидетельство AssemblySecurity, RuntimeAssembly locationHint, StackCrawlMark & ​​stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) в System.Reflection.RuntimeAssembly.InternalLoadAssemblyName (AssemblyName AssemblyRef, Evidence AssemblySecurity, StackCrawlMark & ​​stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks) в System.Reflection.Assembly.Load (AssemblyName assemblyRef) в NUnit.Core.Builders.TestAssemblyBuilder.Load (String path) в NUnit.Core.Builders.TestAssemblyBuilder.Build (String AssemblyName, Boolean autoSuites) в NUnit.Core.Builders.TestAssemblyBuilder.Build (Строка AssemblyName, Строка testName, Булевы autoSuites) в NUnit.Core.TestSuiteBuilder.BuildSingleAssembly (пакет TestPackage) в NUnit.Core.TestSuiteBuilder.Build (пакет TestPackage) в NUnit.Core.SimpleTestRunner.Load (пакет TestPackage) в NUnit.Core.ProxyTestRunner.Load (пакет TestPackage) в NUnit.Core.ProxyTestRunner.Load (пакет TestPackage) в NUnit.Core.RemoteTestRunner.Load (пакет TestPackage) в System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage (IntPtr md, Object [] args, Объектный сервер, Int32 methodPtr, Boolean fExecuteInContext, Object [] & outArgs) в System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage (IMessage msg, Int32 methodPtr, логическое значение fExecuteInContext)

Исключение переброшено в [0]: в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgData, тип Int32) в NUnit.Core.TestRunner.Load (пакет TestPackage) в NUnit.Util.TestDomain.Load (пакет TestPackage) в NUnit.ConsoleRunner.ConsoleUi.Execute (параметры ConsoleOptions) at NUnit.ConsoleRunner.Runner.Main (String [] args)

WRN: регистрация привязки сборки выключена. Чтобы включить ведение журнала ошибок привязки сборки, установите значение реестра [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) для 1. Примечание. некоторое снижение производительности, связанное с ошибкой привязки сборки протоколирование. Чтобы отключить эту функцию, удалите значение реестра [HKLM \ Software \ Microsoft \ Fusion! EnableLog].

http://app1017 -build.oy.gb.sportingindex.com: 8080 / Работа / TradingServices.DataAcquisition-Dev / WS / СИСТЕМА СБОРА ДАННЫХ / build.proj (86,5) : ошибка MSB6006: "nunit-console.exe" завершен с кодом -100. Готово Строительный проект " (цели по умолчанию) - FAILED.

Сборка НЕ ​​удалась.

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Мы вернули нашу сборку на Hudson и теперь переходим к повторной фиксации файлов.Я сообщу о том, как это происходит.Попытка подключить несколько голов к этому безуспешно, к сожалению.Позор!

Обновление Я давно не заходил на эту страницу, но, похоже, есть много разных решений.Если бы я мог отметить их всех как ответ, я бы!Те из вас, кто найдет вам дорогу сюда, должны, вероятно, отдать равную оценку каждому варианту.

Ответы [ 10 ]

53 голосов
/ 11 апреля 2012

У меня была эта проблема с консольным приложением на X64 ПК, сборка была установлена ​​на x86, и он все еще падал.Я вошел в Свойства консольного приложения и в процессе сборки изменил целевой объект платформы с x86 на любой ЦП, затем внезапно все тесты сработали и успешно выполнились.

Обратите внимание, поле платформы Configuration Manager может «лежать» наВы и не должны отражать то, для чего на самом деле настроены свойства проекта.Мой менеджер конфигурации сказал, что Common.dll создавался как «Любой процессор», но свойства проекта (действительно важный параметр) строили его как «x86».

enter image description here

9 голосов
/ 29 июля 2014

Незначительное дополнение ко всем ответам. Возможно, вам придется изменить саму платформу бегунов NUnit (Resharper для меня), как это было в моем случае. См пример enter image description here

6 голосов
/ 07 апреля 2015

Убедитесь, что этот параметр правильный: Тестовое меню -> Тестовые настройки -> Архитектура процессора по умолчанию -> x64 / x86 .Это было неправильно в моем случае, и это не удалось с той же проблемой.

6 голосов
/ 26 марта 2012

Убедитесь, что целевая версия фреймворка вашей сборки совпадает с поддерживаемой nUnit. См. RunFile.exe.config для получения списка поддерживаемых сред выполнения.

Кроме того, если вы перешли с FW 3 на FW 4, они имеют разное время выполнения (CLR отличается).

5 голосов
/ 10 сентября 2012

Я часто сталкиваюсь с этим, когда тестирую приложение Console или WPF.Вот несколько причин:

  • Во-первых, убедитесь, что ваше приложение не работает на клиентском профиле .Net Framework 3 или 4
  • Затем сравните целевую версию платформы .NET для обоих приложений итестовые проекты.Они должны быть одинаковыми
  • Проверьте цель платформы на вкладке сборки.Они должны быть одинаковыми.Например, если тестовый проект имеет цель « Любой ЦП », приложение должно иметь « Любой ЦП ».
3 голосов
/ 06 марта 2014

Для меня исключение вызвано неверным /process=single аргументом nunit.Если я изменю значение, то исключение исчезнет:

/process=separate

или

/process=multiple

p / s: поздний ответ, но только для справки ..

3 голосов
/ 03 мая 2012

Это может звучать глупо, но проверьте архитектуру вашего проекта и процессора. В моем случае я выполнял 64-битные тесты на , что, как я предполагал, было 64-битной машиной (поскольку она создавала 64-битные проекты).

Угадай что? На самом деле это была 32-битная машина. Таким образом, NUnit.exe работает как 32-битный (очевидно) и не может понять 64-битные тесты.

Решение? Создайте версии своих тестов для x86 и x64 и запустите x86 на машинах x86 и x64 на машинах x64.

Очевидные. Но стоит проверить.

2 голосов
/ 12 ноября 2014

Моя ситуация была немного другой.Ошибка появилась довольно случайно после запуска Модульного теста, который был изменен.

Я удалил тест, и ошибка ушла.

Я заново создал тест, и ошибка вернулась.

Я переименовал тест, и ошибка исчезла.

Я переименовал тест, и проблема больше не повторялась.

Надеюсь, это поможет!

Бен

1 голос
/ 13 февраля 2015

Для тех, у кого все еще есть эта проблема, вам также может понадобиться установить поле фреймворка на тестовом средстве, чтобы оно совпадало с полем во включенном вами проекте (поле справа от того, на которое ссылается AlexM).

В моем случае я писал набор тестов для библиотеки Windows Phone 8, и NUnit не смог правильно определить версию платформы, которую он должен использовать.

1 голос
/ 03 мая 2012

Спасибо Ashes999 за то, что разбудили меня.

Эта проблема снова вернулась. И откат и загрузка с не работал. Это оказался объект монитора, который мы даже больше не используем. Закомментировано и исправлено.

Способ найти это - отладить все юнит-тесты. Исправить везде, где это делает паузу. Если t не делает паузу, тогда ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...