Как узнать, как сборка теста отказывается загружаться в NUnit? - PullRequest
5 голосов
/ 05 ноября 2010

(Это работает для других людей в моей команде, поэтому, скорее всего, это связано с настройкой моей машины.)

Я использую тестовый интерфейс NUnit GUI. Когда я использую File / Open Project для загрузки сборки теста, я получаю сообщение об ошибке.

Проект был построен с использованием Visual Studio 2005, и в окне About для Visual Studio версия платформы .NET имеет версию 2.0.50727 SP2.

Это ошибка, которую я получаю:

Сборка не загружена


System.BadImageFormatException: может не загружать файл или сборку 'тесты, Версия = 0.0.0.0, Культура = нейтральная, PublicKeyToken = null 'или один из его зависимостей. Была сделана попытка загрузить программу с неверным формат. Возможно, вы пытаетесь загрузить сборка построена с более поздней версией CLR, чем версия под какой NUnit в настоящее время работает (2.0.50727) или пытается загрузить 64-битная сборка в 32-битный процесс.


Я только что использовал Просмотр журнала привязки сборки (Fuslogvw.exe) для просмотра журнала слияний, это то, что показывает мне, что не имеет никакого смысла, как я сказал, чтобы посмотреть все связывает.

*** Assembly Binder Log Entry  (05/11/2010 @ 11:55:26) ***

The operation was successful.
Bind result: hr = 0x0. The operation completed successfully.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorwks.dll
Running under executable  C:\Program Files (x86)\NUnit 2.5.7\bin\net-2.0\nunit.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = KSSRETAIL\ian.ringrose
LOG: DisplayName = System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 (Fully-specified)
LOG: Appbase = file:///C:/Program Files (x86)/NUnit 2.5.7/bin/net-2.0/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = nunit.exe
Calling assembly : nunit-gui-runner, Version=2.5.7.10213, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Program Files (x86)\NUnit 2.5.7\bin\net-2.0\nunit.exe.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v2.0.50727\config\machine.config.
LOG: Post-policy reference: System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
LOG: Reusing an assembly instance that was previously loaded (C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll).

Благодаря Лассе указывает мне правильное направление. Когда я запускаю nunit-x86.exe, я могу загрузить тестовую DLL. Поэтому где-то в системе должна быть 32-битная DLL. Однако я до сих пор не знаю, как получить полезный набор журналов для логического отслеживания проблем такого типа.

1 Ответ

6 голосов
/ 05 ноября 2010

Для этого есть несколько причин:

1) Версия .NET Framework. Убедитесь, что загружается правильная версия, или укажите ее в конфигурации (app.config)

2) Ад версии: некоторые из ваших сборок используют несовпадающие версии других сборок, в то время как у вас может быть одна версия в локальной папке. Обычно это наиболее вероятная причина.

3) У вас нет ссылки на сборку, но она необходима вашей системе и, возможно, загружается динамически (в nhibernate есть такие библиотеки dll), и они не копируются автоматически в вашу локальную папку тестовых корзин. Добавьте ссылку на эти DLL в вашу локальную папку.

4) Битность 32 бита / 64 бита, если ни один управляемый код не загружен в любой точке

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

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