Confrontare gli assembly .NET compilati?

Ci sono dei buoni programmi là fuori da confrontare con gli assembly .NET compilati?

Ad esempio ho HelloWorld.dll (1.0.0.0) e HelloWorld.dll (2.0.0.0), e voglio confrontare le differenze come posso fare questo?

So di poter utilizzare .NET Reflector e utilizzare il plug-in Assembly Diff. Ci sono altri buoni strumenti là fuori per fare questo?

Modi per confrontare Assemblee .NET suggerisce

Commerciale:

  • NDepend

Gratuito:

  • JustAssembly
  • BitDiffer
  • Componente aggiuntivo Reflector Diff (che hai già scoperto)

Due strade.

Potresti ILDASM e diff con gli strumenti classici.

O potresti usare NDepends, che costerà per quella caratteristica.

[Bloaters da pezzo a C # ..]

Dovevo solo confrontare due revisioni della stessa DLL, che aveva la stessa versione (avevo bisogno di implementare un piccolo aggiornamento rapido e distribuire la DLL in produzione, ma volevo assicurarmi che nessun altro cambiamento trapelasse nel codice). Idealmente, vorrei che l’add-in Assemby Diff mostrasse la differenza, ma non funziona (pensa che io stia paragonando una DLL a se stessa). Quindi questo è quello che ho fatto:

  • Crea due cartelle per contenere file di origine disassemblati.
  • Utilizzata l’opzione di esportazione di Reflector (dal menu di scelta rapida) per generare file di origine da ciascuna DLL nelle cartelle create nel passaggio precedente.
  • Usato lo strumento DiffMerge gratuito per confrontare due directory; gli strumenti mi hanno mostrato i file modificati e la differenza.

È un po ‘sfacciato, ma sembra funzionare. Vorrei che il componente aggiuntivo Diff Assembly avesse funzionato.

AGGIORNAMENTO: L’ultima versione del componente aggiuntivo Diff Assembly dovrebbe risolvere il problema del confronto tra due versioni dello stesso assembly. Provaci.

Lo strumento NDepend offre molte funzionalità per gestire il codice .NET diff. Disclaimer: sono uno degli sviluppatori dello strumento .

Il pannello Ricerca per modifica è dedicato alla navigazione del codice diff. Notare che:

  • È ansible colbind a NDepend qualsiasi strumento di diff di codice utilizzato dal menu Confronta la versione precedente e quella più recente del file di origine
  • Se non hai il codice sorgente, solo gli assembly grezzi, c’è l’opzione Confronta la versione più vecchia e più recente smontata con Reflector

NDepend Ricerca per pannello di diffusione

Si noti inoltre nello screenshot che viene generata una query di codice CQLinq per sfogliare la diff.

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

Molte altre diff query predefinite e regole sono proposte di default, che ti permetteranno di sfogliare il codice .NET diff in modo intelligente.

  • Tipi che erano coperti al 100% ma non più
  • API Breaking Changes: Metodi
  • Evita di rendere i metodi complessi ancora più complessi
  • Evitare di ridurre la copertura del codice con test di tipi
  • Da ora, tutti i tipi aggiunti o rifattorizzati dovrebbero rispettare i principi di base della qualità
  • Evita di trasformare un tipo immutabile in mutabile
  • Euristico per trovare i tipi spostati da un namespace o un assembly a un altro

Un’altra opzione è LibCheck di Microsoft.

Strumento console piuttosto vecchio per ottenere solo la differenza API pubblica. Non ho potuto eseguire senza debug e retargeting su una versione .net più recente. Tuttavia, mi ha dato un output molto chiaro e lo userò in seguito.

Ecco un articolo con screenshot.

Java ha un bell’aspetto: Semantic Diff Utilities