Почему мои тесты терпят неудачу с System.Security.VerificationException?

Я нахожусь в процессе миграции одного из моих проектов с VS2008 на VS2010. Теперь, когда я преобразовал все свои проекты в решении в.NET 4.0 (профиль клиента), когда я запускаю тестовую систему, почти все тесты завершаются неудачей со следующим исключением:

System.Security.VerificationException: операция может дестабилизировать среду выполнения.

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

Полное решение доступно для скачивания здесь.

Может кто-то указать мне верное направление?

3 ответа

Решение

Кажется, проблема связана с активацией кода покрытия. Отключение покрытия кода решает проблему. Вы можете поместить следующее в свой AssemblyInfo.cs:

[assembly: SecurityRules(SecurityRuleSet.Level1, SkipVerificationInFullTrust = true)]

и возобновить покрытие кода.

Первый шаг: Запустите инструмент peverify для встроенных сборок (как тестовых, так и прикладных). Это может дать вам вывод, который поможет точно определить проблему.

Второй шаг: Можете ли вы дать нам трассировку стека или вывод исключений? Единственный раз, когда я действительно увидел ошибку с этим, был в.net 2 и был ошибкой компилятора - мне пришлось немного изменить код, чтобы сделать вызов компиляцией как виртуальный, а не прямой вызов. Предоставление нам стека и строк кода было бы полезно.

Одна вещь, на которую я хочу обратить внимание, состоит в том, что приложения, работающие в профиле клиента 4.0, имеют другое поведение безопасности, чем в 3.5. Вы можете попробовать добавить [assembly: SecurityRules(SecurityRuleSet.Level1)] в ваш файл assemblyinfo.cs для запуска по правилам "старого стиля", чтобы помочь сузить его.

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

Наши проекты уже были ориентированы на.Net 4.0, и модульные тесты работали до обновления.

Поскольку.Net 4.5 является обновлением на месте, ошибка.Net 4.5, представленная Microsoft, может вызвать эту проблему в целевых проектах.Net 4.0. Вероятно, это связано с ответом SecurityRules, но является внутренним для dll фреймворка (например, Microsoft.VisualStudio.QualityTools.UnitTestFramework).

Для нас исправление, указанное ниже, исправило: "Операция может дестабилизировать среду выполнения". исключения в том, что в противном случае работали юнит-тесты.

http://support.microsoft.com/kb/2748645

Я надеюсь, что это сэкономит кому-то еще много времени

Другие вопросы по тегам