Я обновил наше программное обеспечение с 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, исключение исчезает. Обе настройки необходимы, если я изменю только одну из них, ошибка останется. Однако другой набор тестов не сработает, если я изменю только один. Все библиотеки классов скомпилированы для любого процессора.