web-dev-qa-db-fra.com

Comparez les assemblys .NET compilés?

Existe-t-il de bons programmes à comparer pour compiler des assemblys .NET?

Par exemple, j'ai HelloWorld.dll (1.0.0.0) et HelloWorld.dll (2.0.0.0), et je veux comparer les différences, comment puis-je faire cela?

Je sais que je peux utiliser .NET Reflector et utiliser le plugin Assembly Diff. Existe-t-il d'autres bons outils pour le faire?

48
Danny G
43
Daniel LeCheminant

Deux manières.

Vous pouvez ILDASM et diff avec des outils classiques.

Ou vous pouvez utiliser NDepends, qui coûtera pour cette fonctionnalité.

[Morceau aux ballonnements C # ..]

24
rama-jka toti

J'ai juste eu à comparer deux révisions de la même DLL, qui avait la même version (j'avais besoin d'implémenter un petit correctif et de déployer le DLL en production, mais je voulais m'assurer qu'aucun idéalement, je voudrais que le complément Assemby Diff me montre la différence, mais cela ne fonctionne pas (il pense que je compare un DLL à lui-même) Voici donc ce que j'ai fait:

  • Créé deux dossiers pour contenir les fichiers source désassemblés.
  • Utilisez l'option Reflector Export (à partir du menu contextuel) pour générer des fichiers source à partir de chaque DLL dans les dossiers créés à l'étape précédente.
  • A utilisé l'outil gratuit DiffMerge pour comparer deux répertoires; les outils m'ont montré les fichiers modifiés et la différence.

C'est un peu maladroit, mais semble fonctionner. Je souhaite cependant que le complément Assembly Diff fonctionne.

MISE À JOUR: La dernière version du complément Assembly Diff est censée résoudre le problème de la comparaison de deux versions du même assembly. Essaie.

11
Alek Davis

L'outil NDepend offre de nombreuses fonctionnalités pour gérer le code diff .NET. Avis de non-responsabilité: je suis l'un des développeurs de l'outil.

Le panneau Recherche par changement est dédié à parcourir les codes de code des assemblys. Remarquerez que:

  • Vous pouvez connecter à NDepend n'importe quel outil de diff de code utilisé par le menu Comparez les versions plus anciennes et plus récentes du fichier source
  • Si vous n'avez pas le code source, seulement les assemblages bruts, il y a l'option Comparer les versions plus anciennes et plus récentes démontées avec Reflector

NDepend Search by Diff Panel

Notez également dans la capture d'écran qu'un requête de code CQLinq est généré pour parcourir le diff.

from m in Application.Methods 
where m.CodeWasChanged() 
select new { m, m.NbLinesOfCode }

De nombreuses autres requêtes et règles de diff par défaut sont proposées par défaut, ce qui vous permettra de parcourir le code .NET différemment de manière intelligente.

Une autre option est LibCheck de Microsoft.

Assez ancien outil de console pour obtenir simplement un diff d'API public. Je ne pouvais pas courir sans débogage et reciblage vers une version .net plus récente. Cependant, cela m'a donné une sortie très claire et je vais l'utiliser plus tard.

Voici un article avec des captures d'écran.

1
Eugene