25 Stimmen

.NET Assembly Diff / Compare Tool - Was ist verfügbar?

Ich würde gerne einen Vergleich auf Code-Ebene zwischen zwei Baugruppen durchführen; das Diff-Plug-in für Reflector kommt dem bisher am nächsten, aber der Vergleich der gesamten Baugruppe ist ein manueller Prozess, bei dem ich jeden Namespace, jede Klasse und jede Methode aufschlüsseln muss.

Die anderen Tools, die ich bisher gefunden habe, scheinen sich auf Unterschiede auf API-Ebene (Namespaces, Klassen, Methoden) zu beschränken, was für das, wonach ich suche, nicht ausreicht.

Kennt jemand ein solches Werkzeug? Meine Anforderungen (von oben nach unten) sind:

  • Analysieren / Reflektieren können die Code Inhalt von zwei Versionen der gleichen Baugruppe und melden Sie die Unterschiede
  • Akzeptieren Sie einen Ordner oder eine Gruppe von Baugruppen als Eingabe; vergleichen Sie sie schnell (ähnlich wie die Ordner-Diffs von WinMerge)
  • Schnelle Feststellung, ob zwei Baugruppen auf Code-Ebene gleichwertig sind (nicht nur die APIs)
  • Einfaches Drill-down zur Anzeige der Unterschiede ermöglichen
  • Exportieren von Berichten über die Unterschiede

(Ich persönlich mag WinMerge für Textabweichungen, daher wäre eine Anwendung mit einer ähnlichen Schnittstelle großartig)

1voto

Chris Brandsma Punkte 11525

Ich glaube, es gibt ein Reflector-Addon für diesen Zweck unter http://www.codeplex.com/reflectoraddins genannt diff. Das können Sie versuchen.

0voto

Kevin Castle Punkte 101

Das Diff-Addin für Reflektor ist großartig! Ich benutze es schon seit Jahren.

0voto

Earlz Punkte 59611

Ich habe ein kleines Tool speziell für den Vergleich von Baugruppen auf eine bestimmte Weise erstellt. Ich hatte zwei Assemblies, die im Grunde genommen gleich waren, außer dass die AWL in den Methoden leicht unterschiedlich war und eine einige NOPs enthielt. Der C#-Code war bei beiden fast identisch, aber die AWL war eindeutig sehr unterschiedlich. Ich habe versucht, ILDasm zu verwenden und die generierte Ausgabe mit TortoiseMerge/WinDiff zu vergleichen, aber es gab so viele falsche Unterschiede, dass es nutzlos war. Die NOPs brachten die Ausgabe wirklich durcheinander, da sie Verzweigungsadressen und dergleichen änderten und im Grunde in jeder Zeile jeder Methode einen Unterschied erzeugten.

Also habe ich ein kleines Tool namens ILDump . Es ist BSD-lizenziert. Es ist in der Lage, NOPs herauszuschneiden und "intelligente" Label-Umbenennung zu verwenden, so dass Code, der gleich ist, aber um einen NOP verschoben wurde, von Diff-Programmen nicht als Unterschied erkannt wird, und es druckt auch nur signifikante Labels aus (d.h. solche, zu denen verzweigt oder gewechselt wird). Es kann auch Methoden sortieren, so dass zwei Assemblies, die auf unterschiedliche Weise "erstellt" wurden, nicht als Unterschied erkannt werden.

Es ist definitiv nicht perfekt, es kann nur die IL jeder Methode ausgeben, und es gibt keine Hoffnung auf Roundtripping. Der Grund, warum ich es erstellt habe, war, um das Lesen einer Methode IL einfacher zu machen (es ist intelligent Beschriftung macht es deutlich einfacher, Zweige zu verfolgen), und so, dass ich es durch ein Programm wie TortoiseMerge oder WinDiff laufen könnte und es nicht sagen, es gibt einen Unterschied auf jeder Zeile des Codes.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X