Почему мои тесты терпят неудачу с 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
Я надеюсь, что это сэкономит кому-то еще много времени