Confrontare gli assembly .NET compilati?
-
19-08-2019 - |
Domanda
Esistono programmi validi da confrontare per compilare assembly .NET?
Ad esempio ho HelloWorld.dll (1.0.0.0) e HelloWorld.dll (2.0.0.0) e voglio confrontare le differenze come posso fare?
So che posso usare .NET Reflector e usare il plugin Assembly Diff. Ci sono altri buoni strumenti là fuori per farlo?
Soluzione
Modi per confrontare gli assembly .NET suggerisce
commerciale:
Free:
- JustAssembly
- BitDiffer
- Componente aggiuntivo Reflector Diff (che hai già scoperto)
Altri suggerimenti
Due modi.
Potresti ILDASM e diff con gli strumenti classici.
Oppure potresti usare NDepends, che costerà per quella funzione.
[Bloccatori da Piece a C # ..]
Ho dovuto 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 nessuna altra modifica trapelasse nel codice) . Idealmente, vorrei che il componente aggiuntivo Assemby Diff mi mostrasse la differenza, ma non funziona (pensa che sto confrontando una DLL con se stessa). Quindi questo è quello che ho fatto:
- Creato due cartelle per contenere i file di origine disassemblati.
- Utilizzato l'opzione Esporta del Reflector (dal menu contestuale) per generare file di origine da ciascuna DLL nelle cartelle create nel passaggio precedente.
- Utilizzato lo strumento gratuito DiffMerge per confrontare due directory; gli strumenti mi hanno mostrato i file modificati e la differenza.
È un po 'complicato, ma sembra funzionare. Tuttavia, vorrei che il componente aggiuntivo Assembly Diff funzionasse.
AGGIORNAMENTO: si suppone che l'ultima versione del componente aggiuntivo Assembly Diff risolva il problema del confronto tra due versioni dello stesso assembly. Provalo.
Lo strumento NDepend offre molte funzionalità per gestire la diff del codice .NET. Dichiarazione di non responsabilità: sono uno degli sviluppatori dello strumento .
Il pannello Cerca per modifica è dedicato alla ricerca del codice diff. Si noti che:
- Puoi collegare a NDepend qualsiasi strumento diff di codice utilizzato dal menu Confronta la versione precedente e più recente del file sorgente
- Se non si dispone del codice sorgente, solo degli assembly non elaborati, è disponibile l'opzione Confronta versione precedente e più recente smontata con Reflector
Notare anche nello screenshot che viene generata una Query di codice CQLinq per sfogliare il diff .
from m in Application.Methods
where m.CodeWasChanged()
select new { m, m.NbLinesOfCode }
Molte altre domande e regole diff predefinite sono proposte di default, che ti permetteranno di sfogliare il codice .NET 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
- Evita di ridurre la copertura del codice testando i tipi
- Da adesso, tutti i tipi dovrebbero essere aggiunti o rispettati / a>
- Evita di trasformare un tipo immutabile in mutabile
- Euristico per trovare i tipi spostati da un altro spazio dei nomi
Un'altra opzione è LibCheck di Microsoft.
Strumento di console piuttosto vecchio per ottenere solo diff API pubblica. Non ho potuto eseguire senza il debug e il retargeting a una versione .net più recente. Tuttavia, mi ha dato un output molto chiaro e lo userò in seguito.
Ecco un articolo con schermate .
Java ne ha una bella: Semantic Diff Utilities