2010-10-12 10 views
3

Je suis en train de migrer un de mes projets de VS2008 à VS2010. Maintenant que je me suis converti tous mes projets dans la solution à .NET 4.0 (profil client) quand je lance le faisceau de test, presque tous les tests échouent à l'exception suivante:Pourquoi mes tests échouent-ils avec System.Security.VerificationException?

System.Security.VerificationException: opération pourrait déstabiliser le runtime .

Je n'ai pas pu déterminer pourquoi cette exception se produit. Les tests fonctionnent très bien lorsque je les lance en mode débogage.

L'ensemble de la solution est disponible au téléchargement here.

Quelqu'un peut-il me diriger dans la bonne direction?

+0

Pouvez-vous confirmer que l'application est en cours d'exécution sous le CLR 4.0? Tous les projets de la solution sont-ils configurés pour cibler .NET 4.0? –

+0

[this] (http://stackoverflow.com/questions/378895/operation-could-destabilize-the-runtime) est-il utile? – adrianbanks

+0

@Darin la bibliothèque et son application de support s'exécutent sous .NET 4 Client Profile (ils n'ont pas besoin de plus que cela).Le projet de test fonctionne sous .NET 4 et il est impossible de le recibler. –

Répondre

3

Le problème semble être lié à la couverture de code que vous avez activée. La désactivation de la couverture de code résout le problème. Vous pouvez placer les éléments suivants dans AssemblyInfo.cs:

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

et de réactiver la couverture de code.

+0

Bon appel! Je vais vérifier dans une minute pour voir ce qui a changé dans la couverture de code pour VS2010. –

1

Première étape: Exécutez le peverify tool sur les assemblys assemblés (test et application). Il peut vous donner un résultat qui aide à identifier le problème.

Deuxième étape: Pouvez-vous nous donner la sortie de pile ou d'exception? La seule fois où j'ai vu une erreur avec ceci était dans .net 2 et était une erreur de compilateur - j'ai dû modifier légèrement le code pour faire un appel de compilation comme un appel virtuel plutôt que direct. Nous donner la pile et les lignes de code en question serait utile. Une chose que je veux souligner est que les applications qui s'exécutent sous le profil client 4.0 ont des comportements de sécurité différents de ceux qui s'exécutent sous 3.5. Vous pouvez essayer d'ajouter [assembly: SecurityRules(SecurityRuleSet.Level1)] à votre assemblyinfo.cs pour fonctionner sous les règles "old style" pour vous aider à le réduire.

+0

L'exécution sous 4.0 (pas le profil client) ne résout pas le problème. En outre, tout le code est disponible pour téléchargement dans le lien dans la question. –

0

J'ai rencontré cette question en cherchant une réponse à un problème très similaire lors d'une mise à niveau d'un serveur de construction TFS2010 vers TFS2012.

Nos projets visaient déjà .Net 4.0 et les tests unitaires fonctionnaient avant la mise à niveau.

Étant donné que .NET 4.5 est une mise à niveau sur place, un bogue .Net 4.5 introduit par Microsoft pourrait causer ce problème dans les projets ciblés .Net 4.0. Il est probablement lié à la réponse SecurityRules, mais interne aux dll de framework (comme Microsoft.VisualStudio.QualityTools.UnitTestFramework).

Pour nous le correctif lié ci-dessous a fixé le "L'opération pourrait déstabiliser l'exécution." exceptions dans ce qui fonctionnait autrement les tests unitaires.

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

J'espère que cela sauve quelqu'un d'autre beaucoup de temps