2010-07-14 2 views
5

J'ai mis à jour notre logiciel de vs2008/.net 3.5 à vs2010/.net 4.0. Toutes les bibliothèques tierces (les plus pertinentes: nhibernate 2.1.2 ou 3.0.0, nunit 2.5.2) sont toujours compilées en utilisant vs2008. Quand j'exécute les tests unitaires pour la construction de débogage de notre logiciel, tout fonctionne bien. Sur la version release, nunit signale des exceptions sur 33 des 228 tests: System.InvalidProgramException : Common Language Runtime detected an invalid program. Cela arrive toujours sur les mêmes tests, à la fois pour nunit-console et pour le coureur de test Resharper 5.0. Quand je les lance en utilisant la commande "debug unit-tests" de Resharper, tous les tests passent. Cela ne fait aucune différence si je lance les tests individuellement ou par lots. L'exception se produit toujours à proximité des appels de requête nhibernate, mais je ne peux pas le dire avec certitude, car la trace de la pile de build de version est quelque peu éparse. Il ne dépend pas du générateur de bytecode nhibernate, la même exception apparaît pour castle et linfu. Est-ce que quelqu'un a une idée de comment déboguer cela?nunit lors de la création de la version: "Common Language Runtime a détecté un programme non valide."

Modifier: Supprimer Spring.NET n'a eu aucun effet sur ce problème.

Edit: Lorsque je passe la sortie de débogage de configuration de version à complète au lieu de pdb seulement et désactiver le Code optimize case, l'exception disparaît. Les deux paramètres sont obligatoires, si je ne change que l'un d'entre eux, le bug persiste. Cependant, un ensemble différent de tests échoue si je n'en change qu'un. Toutes les bibliothèques de classes sont compilées pour Any CPU.

+0

Pouvez-vous vérifier si les configurations de version et de débogage du projet diffèrent? J'ai vu des cas, où quelqu'un ajoute X à la configuration de débogage ... laissant le config de sortie stale .. – Gishu

+0

@Gishu: J'ai été en mesure de tracer la différence à la sortie de débogage et optimiser les paramètres de code - aucun autre paramètre semble affecter ce problème. –

+0

Hmm .. Pas de direction définie ici. à partir de quelques recherches superficielles, il semble être lié à des appels dll tiers. http://bit.ly/g3iwnK Essayez d'obtenir le stacktrace et de poster sur le bon forum MS - semble être une zone de niche (pas exactement le point fort de SO) – Gishu

Répondre

0

C'est probablement une question stupide: êtes-vous sûr que tous les assemblys sont compilés avec la même architecture (x86/x64)? Je suis tombé sur ça une fois de temps en temps.

+0

Devrait-il fonctionner lorsque tous les assemblys sont compilés pour * Any CPU *, ou faire Je dois spécifier la cible explicitement? –

+0

Tout processeur devrait fonctionner. Le compilateur JIT compilera les choses à l'architecture appropriée lors de l'exécution. – Amy

0

J'avais quelque chose de similaire quand j'ai choisi "NET Framework 4.0 Client Profile". Essayez de changer le cadre cible « NET Framework 4.0 »

+0

C'est déjà le profil complet 4.0, pas CP. –

0

Mon application serait également exécuter en débogage mais plantage avec cette même exception sur la configuration de libération. La cause était que j'avais une méthode avec l'attribut conditionnel "DEBUG", qui renvoyait une valeur ...

Bien sûr, dans release config, toutes les méthodes avec l'attribut "DEBUG" conditionnel sont changées en stubs sans retour valeur. Donc l'IDE peut penser que vos types vont bien gong par l'analyse de code et n'offrent aucun avertissement, mais l'application compilée a le type de retour miss-matches! Je pensais juste que j'ajouterais ceci pour ceux qui se cognent la tête contre un mur avec ce problème.

Questions connexes