2010-01-04 4 views
3

J'essaie d'utiliser des contrats de code avec .NET 3.5 dans un grand projet d'application de bureau, qui comporte également une dépendance C++ DLL en mode mixte, écrite dans l'ancienne syntaxe C++ gérée.Erreurs de métadonnées CodeContracts lors de la réécriture

La vraie solution consiste en au moins 20 projets, mais supposons qu'il n'y a que des projets A, B, C et D, et le projet M en mode mixte. C dépend de A, B et M. A, B et C sont tous configurés pour effectuer la vérification de l'exécution, et la réécriture du code fonctionne bien. Maintenant, je voulais ajouter quelques contrats à l'un des assemblages de niveau supérieur à, appelé D. D dépend de tous les autres, A, B, C et M aussi. Maintenant, la réécriture de code échoue D avec le message suivant (je l'ai changé les noms):

15> Reading assembly 'C' from 'build\debug\C.dll' resulted in errors. 
15> ccrewrite : error : Rewrite aborted due to metadata errors. Check output window 
15>  Input string was not in a correct format. 
15>  Malformed signature. 
15>  Index was outside the bounds of the array. 
15>  Malformed signature. 
15>  Could not resolve type reference: [M]Name.Space.Class1. 
15>  Could not resolve type reference: [M].EnumType. 
15>  Malformed signature. 
15>  Malformed signature. 
15>  Could not resolve type reference: [M]Name.Space.Class1. 
15>  Could not resolve type reference: [M].EnumType. 
15>  Malformed signature. 
15>  Malformed signature. 
15>  Input string was not in a correct format. 
15>  Malformed signature. 
15>  Could not resolve type reference: [M]Name.Space.Class1. 
15>  Could not resolve type reference: [M].EnumType. 
15>  Malformed signature. 
15>  Malformed signature. 
15>  Index was outside the bounds of the array. 
15>  Malformed signature. 

Parce que les messages sur M, je pense que le problème est avec le mode mixte C++ DLL. Mais l'assemblage C dans son propre peut être réécrit avec succès du code, alors qu'il référence également M.

Je pense aussi que le problème ne réside pas directement dans l'ensemble D, parce que je l'ai essayé avec un autre niveau plus élevé assemblées dans la même solution et ils ne peuvent pas être réécrites par les contrats de code outil si elles font référence à C.

la version que je utilise est 1.2.21023.14

J'ai aussi posé cette question dans les CodeContracts MSDN forum mais n'ont pas encore reçu de réponse, alors j'ai pensé que j'essaierais ici. Je suis intéressé par toute solution de contournement ou idée liée à cela.

+0

J'utilise actuellement des contrats de code avec une bibliothèque qui dépend d'une bibliothèque C++ gérée sans problème. La seule chose que je peux penser est que les contrats sur les types C++ eux-mêmes pourraient être une mauvaise idée. Je n'en ai aucune, pour ce que ça vaut. – porges

+0

Oh mon dieu, je viens de réaliser que mon StackOverflow était filtré pour répondre aux questions "sans réponse", j'ai répondu à d'anciennes questions pendant un moment maintenant ...: P – porges

Répondre

3

Pour effacer les erreurs de métadonnées, il suffit souvent de nettoyer votre solution, puis de la reconstruire.

+1

vrai. vous devrez peut-être nuke votre répertoire de sortie entier. –

Questions connexes