Почему мои тесты терпят неудачу с System.Security.VerificationException? - PullRequest
3 голосов
/ 12 октября 2010

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

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 12 октября 2010

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

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

и повторно активируйте покрытие кода.

1 голос
/ 12 октября 2010

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

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

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

0 голосов
/ 30 октября 2013

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

Надеюсь, это сэкономит кому-то еще МНОГО времени

...