nunit при сборке выпуска: «Common Language Runtime обнаружил недопустимую программу». - PullRequest
6 голосов
/ 15 июля 2010

Я обновил наше программное обеспечение с vs2008 / .net 3.5 до vs2010 / .net 4.0. Все сторонние библиотеки (наиболее важные: nhibernate 2.1.2 или 3.0.0, nunit 2.5.2) по-прежнему компилируются с использованием vs2008. Когда я запускаю модульные тесты для отладочной сборки нашего программного обеспечения, все работает нормально. В сборке выпуска nunit сообщает об исключениях в 33 из 228 тестов: System.InvalidProgramException : Common Language Runtime detected an invalid program. Это всегда происходит в одних и тех же тестах как для nunit-console, так и для тестового запуска Resharper 5.0. Когда я запускаю их с помощью команды Resharper "debug unit-tests", все тесты проходят. Не имеет значения, запускаю ли я тесты индивидуально или в пакетном режиме. Исключение всегда происходит рядом с вызовами запросов nhibernate, но я не могу сказать наверняка, так как трассировка стека сборки выпуска является немного разреженной. Он не зависит от генератора байт-кода nhibernate, такое же исключение появляется для castle и linfu. У кого-нибудь есть идеи как это отладить?

Редактировать: Удаление Spring.NET не оказало влияния на эту проблему.

Редактировать: Когда я переключаю выходные данные отладочной конфигурации выпуска на full вместо pdb only и отключаю флажок optimize code , исключение исчезает. Обе настройки обязательны, если я изменю только одну из них, ошибка останется. Однако другой набор тестов не пройден, если я только изменю один. Все библиотеки классов скомпилированы для Любой процессор .

Ответы [ 3 ]

0 голосов
/ 08 января 2011

У меня было что-то похожее, когда я выбрал «Профиль клиента NET Framework 4.0».Попробуйте изменить целевой фреймворк на "NET Framework 4.0"

0 голосов
/ 22 февраля 2014

Мое приложение также будет работать в режиме отладки, но аварийно завершать работу с тем же исключением в конфигурации выпуска. Причина была в том, что у меня был метод с условным атрибутом «DEBUG», который возвращал значение ...

Конечно, в конфигурации выпуска все методы с условным атрибутом "DEBUG" заменяются на заглушки без возвращаемого значения. Таким образом, среда IDE может подумать, что ваши типы отлично подходят для анализа кода и не выдают предупреждений, но скомпилированное приложение имеет несоответствия возвращаемых типов!

Просто подумал, что добавлю это для тех, кто бьется головой об стену с этим вопросом.

0 голосов
/ 08 января 2011

Вероятно, это глупый вопрос: вы уверены, что все сборки скомпилированы для одной и той же архитектуры (x86 / x64)? Я столкнулся с этим некоторое время назад.

...