Ogni volta che ricompiliamo la nostra applicazione C# ci ritroviamo con EXE con diverse firme MD5. Stiamo ricompilando sulla stessa macchina, a pochi minuti di distanza. Perché lo stesso codice sorgente non produce lo stesso risultato? C'è un modo per risolvere questo problema?Perché C# genera EXE diversi per lo stesso codice sorgente?
risposta
"Così, ogni assemblea ha:
- un timestamp, in due luoghi
- un GUID che hanno abbinato il PPB
- Quello che sembra essere un GUID del tutto casuale generato ogni compilazione
- A. contatore che indica quale sia la build dell'assembly - generata solo nelle successive build di Visual Studio. "
da:
Buona risposta. Grazie! – Gili
Ho dovuto suddividere questi casi in precedenza e sembra essere solo modifiche al tipo di timbro DateTime (è un'ipotesi). Se si inseriscono entrambi gli assembly con gli strumenti diff, si vedrà solo un numero molto piccolo di righe nel PE modificato; se cambi anche una piccola quantità di codice e confronti gli assemblaggi vedrai differenze drasticamente più grandi.
Ecco una domanda ho aperto mentre la ricerca di strumenti per identificare le differenze "reali" da quelli superficiali:
Ci sarà una costruito nel numero di versione che cambierà ad ogni generazione.
Penso che la chiave potrebbe essere "minuti a parte". Se è presente un timestamp all'interno dell'EXE, ciò modificherà la firma MD5.
È una supposizione? – Gili
Non ho mai esaminato l'EXE prodotto dal compilatore C# e non ho toccato C# in più di un anno. Ma spiegherebbe tutto molto bene, e ha senso. –
Molto probabilmente si hanno diversi * nel numero di versione dell'assieme. Ciò fa sì che il numero di versione dell'assembly venga incrementato automaticamente sulla build, il che causerà una differenza visibile nell'assieme prodotto. Quindi un diverso checksum MD5.
Provare a cambiare il numero di versione in una versione di assemblaggio costante e vedere se questo risolve il problema.
Si potrebbe provare a eseguire ildasm.exe (il mio percorso per questo è C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin
) sui due file .exe.
Quindi scaricare la vista grezza delle intestazioni e confrontarle con uno strumento diff. Se non c'è ancora alcuna differenza, allora potrebbero essere le intestazioni PE che avrebbero bisogno di uno strumento più avanzato da scoprire. Ildasm ti dà la dimensione dell'intestazione PE e altre statistiche su di esso però.
Consiglio vivamente l'uso dei flag/source e/out. –
- 1. Perché la creazione dello stesso progetto genera file EXE diversi per ogni sviluppatore
- 2. DefaultPasswordHasher che genera hash diversi per lo stesso valore
- 3. Bcrypt genera hash diversi per lo stesso input?
- 4. In che modo la compilazione dello stesso codice sorgente genera file oggetto diversi?
- 5. Perché GCC genera un assemblaggio così radicalmente diverso per quasi lo stesso codice C?
- 6. Stesso semplice codice sorgente, diversi file binari su Windows
- 7. Tela HTML5: lo stesso codice genera risultati diversi in browser diversi
- 8. Perché Objects.hash() restituisce valori diversi per lo stesso input?
- 9. L'associazione degli indirizzi genera lo stesso indirizzo
- 10. struct con lo stesso nome ma diversi Stati in C++
- 11. C codice sorgente libreria
- 12. Lo stesso codice C produce risultati diversi su Mac OS X rispetto a Windows e Linux
- 13. Perché due nuovi oggetti non hanno lo stesso codice hash?
- 14. Perché lo stesso codice viene eseguito più velocemente nella discussione?
- 15. Cosa potrebbe causare lo stesso browser su PC diversi per il rendering dello stesso codice HTML in modo diverso?
- 16. Perché questo codice genera System.ExecutionEngineException
- 17. Beautifier codice sorgente per C++ (vC++)?
- 18. Buon browser di codice sorgente per C
- 19. Spring BCryptPasswordEncoder genera password diverse per lo stesso input
- 20. Riferimenti a oggetti diversi per lo stesso oggetto (?)
- 21. Lo stesso oggetto in più servizi web genera classi duplicate
- 22. Genera grafico chiamante per codice C++
- 23. stesso codice, ma diversi risultati utilizzando gin + go-modello
- 24. Come utilizzare lo stesso adattatore RecyclerView per diversi layout
- 25. javascript: diversi costruttori per lo stesso tipo di oggetto
- 26. È possibile estrarre il codice sorgente C# dal file exe dell'applicazione Winforms
- 27. Perché lo stesso valore DateTime restituisce un tempo di visualizzazione diverso per utenti diversi?
- 28. Perché Java è più veloce se ripete lo stesso codice?
- 29. Perché Alt Gr ha lo stesso codice chiave di Ctrl?
- 30. Perché i diversi metodi dello stesso oggetto hanno lo stesso `id`?
Immagino che tu abbia già ma ... hai controllato il manifest con IL DASM? – yeyeyerman