Nunit.exe не может работать на 64-битной Vista, если сборка x86

Я использую Vista 64 бита, и у меня есть проект, построенный с конфигурацией x86. Все нормально работает. Теперь пришло время создать test. У нас есть NUnit 2.4.8, но у нас много проблем.

Тест загружается через Nunit.exe (gui), когда мы выбираем .dll напрямую, но при выполнении у нас есть исключение system.badimageformatexception.

Я прочитал, выполнив поиск в Google, несколько трюков с nunit.exe.config, но ни один из них не работает. (переход на UTF8 ... раскомментируйте версию .net для запуска).

Любая идея?

Обновить

Я очистил решение и стер всю папку BIN. Теперь, когда я компилирую, я ясно вижу, что у меня есть только / x86 / в каталоге bin, а не старый / debug /, который был в x64.

Когда я использую Nunit, у меня возникает исключение (при загрузке): System.IO.FileNotFoundException ...

Трассировка стека сервера: в System.Reflection.Assembly._nLoad (AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark и stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) в System.Reflection.Assembly.Nternal assemblySecurity stackMark, Boolean forIntrospection) в System.Reflection.Assembly.InternalLoad (String assemblyString, Evidence assemblySecurity, StackCrawlMark и stackMark, Boolean forIntrospection) в System.Reflection.Assembly.Load (String assemblyString) в NUnit.Coreest.Builders путь) в NUnit.Core.Builders.TestAssemblyBuilder.Build (String assemblyName, Boolean autoSuites) в NUnit.Core.Builders.TestAssemblyBuilder.Build (String assemblyName, String testName, Boolean autoSuites) в NUnitageBuilder.Core.TestPack ) в NUnit.Core.TestSuiteBuilder.Build (пакет TestPackage) в NUnit.Core.SimpleTestRunner.Load (пакет TestPackage) в NUnit.Core.ProxyTestRunner.Load (пакет TestPackage) в NUnit.Core.ProxyTestRunner.Load (пакет TestPackage) в пакете NUnit.Core.RemoteLoteTestRunit .Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage (IntPtr md, Object [] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object [] & outArgs) в System.Runtime.Remoting.Messaging.StackCync. Int32 methodPtr, логическое значение fExecuteInContext)

Исключение повторно генерируется в [0]: в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData и msgData, тип. Int32) TestRunner.Load (пакет TestPackage) в NUnit.Util.TestDomain.Load (пакет TestPackage) в NUnit.Util.TestLoader.LoadTest (String testName)

Обновление 2

Я компилирую с ЛЮБЫМ процессором, который я модифицировал до x86 вместо x64. Причина в отладке . Об этом уже говорилось в предыдущей ссылке. Я должен подтвердить, что NUnit работает в 64-битном режиме и Corflags.exe.


person Patrick Desjardins    schedule 16.10.2008    source источник


Ответы (6)


Хорошо, я нашел решение в этом веб-сайт. Вы должны использовать \ NUnit-2.4.8 \ bin \ nunit-x86.exe вместо \ NUnit-2.4.8 \ bin \ nunit.exe ... не знал, что \ bin \ имеет 2 единицы !! !

Спасибо всем

person Patrick Desjardins    schedule 16.10.2008
comment
Я не являюсь владельцем сайта. Но, по крайней мере, я написал ответ :) так что это не имеет особого значения. - person Patrick Desjardins; 19.08.2011
comment
nunit-x86.exe создан для тестирования 32-битного приложения в 64-битной системе. См. Подробное объяснение здесь: nunit.org/index.php?p = nunit-gui & r = 2.4.2 - person mas_oz2k1; 20.01.2012

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

Вы можете попробовать запустить corflags в исполняемом файле NUnit, чтобы заставить его запустить x86, используя флаг / 32bit +

person Rob Walker    schedule 16.10.2008
comment
Вы правы, я не вижу * 32 после Nunit.exe. Я проверю вашу ссылку и вернусь к вам. +1 за подсказку! - person Patrick Desjardins; 16.10.2008
comment
Не работает. Я попробовал другой файл, и он работает. Но Нунит этого не делает. У меня ошибка CF001: не удалось открыть файл для записи. Файл не доступен только для чтения ... - person Patrick Desjardins; 16.10.2008

Это также может произойти при обновлении TeamCity 3.1 до 4.0 на сервере сборки x64 с установленной платформой запуска MSBuild для x86. Бегун TeamCity, похоже, использует платформу по умолчанию в 4.0 по-другому, чем в 3.1, не учитывая тот факт, что сборка работает на x86.

В моем случае первое исправление, которое сработало, было добавление переопределения платформы к вызову NUnit в моем сценарии MSBuild:

<NUnit Assemblies="Test/bin/$(Platform)/$(Configuration)/Test.dll" Platform="x86" /> 

(то есть способ запуска тестов TeamCity для принудительного использования 32-битной версии, как в других предложениях)

(Это касается случаев, когда целевой платформой для тестовой сборки является Any CPU (хотя, как оказалось, я явно установил для них x86, поскольку некоторые тесты динамически загружают библиотеки DLL, которые ограничены x86)).

person Ruben Bartelink    schedule 03.12.2008

Почему вы используете конфигурацию x86, а не какой-либо процессор?

Я предполагаю, что когда вы загружаете NUnit, он был построен с опцией Any CPU, поэтому JIT переходит в код x64. Когда он пытается загрузить ваши тесты, которые специально скомпилированы для запуска как x86, он выдает исключение.

Я бы попробовал изменить все ваши настройки конфигурации на Any CPU и посмотреть, решит ли это вашу проблему.

person John Sibly    schedule 16.10.2008
comment
ЛЮБОЙ ЦП был изменен на X86. Я работаю на ЛЮБОМ ЦП ... не на x64, потому что я не мог отлаживать с помощью точки останова и редактировать на X64. - person Patrick Desjardins; 16.10.2008

При использовании TeamCity вы можете добавить свойство teamcity.dotnet.nant.nunit2.platform со значением x86 в параметры сборки в настройках конфигурации вашего проекта TeamCity (в свойствах и раздел переменных среды).

person Modan    schedule 27.05.2011

Была такая же проблема с TeamCity 8.1. Решением было изменение шага сборки NUnit .NET Runtime / Platform: на x86.

Мне также пришлось изменить путь Запускать тесты из: с TestProject \ bin \ Release на TestProject \ bin \ x86 \ Release

person petrsyn    schedule 02.06.2014