Domanda

Quando eseguo una build pulita del mio progetto C #, la dll prodotta è diversa da quella precedentemente costruita (che ho salvato separatamente). Non sono state apportate modifiche al codice, solo pulite e ricostruite.

Diff mostra che alcuni byte nella DLL hanno delle modifiche: pochi all'inizio e pochi alla fine, ma non riesco a capire cosa rappresentino. Qualcuno ha spunti sul perché questo sta accadendo e su come prevenirlo?

Questo utilizza Visual Studio 2005 / WinForms.

Aggiornamento: non utilizzare l'incremento automatico della versione o la firma dell'assembly. Se è un timestamp di qualche tipo, come posso impedire a VS di scriverlo?

Aggiornamento: Dopo aver guardato in Ildasm / diff, sembra che i seguenti elementi siano diversi:

  • Due byte nell'intestazione PE all'inizio del file.
  • < PrivateImplementationDetails > { guid } sezione
  • Parte criptica della tabella delle stringhe vicino alla fine (chiedo perché, non ho cambiato le stringhe)
  • Parti delle informazioni sull'assieme alla fine del file.

Non ho idea di come eliminare nessuno di questi, se possibile ...

È stato utile?

Soluzione

La mia ipotesi migliore è che i byte modificati che vedi sono le colonne di metadati utilizzate internamente che vengono generate automaticamente al momento della compilazione.

Alcune delle colonne Ecma-335 Partition II (CLI Specification Metadata Definition) che possono cambiare per build, anche se il codice sorgente non cambia affatto:

  • Module.Mvid: un GUID generato in fase di generazione. Cambia sempre, ogni build.
  • AssemblyRef.HashValue: potrebbe cambiare se si fa riferimento a un altro assembly che è stato ricostruito anche dalla vecchia build.

Se questo ti preoccupa davvero, il mio miglior consiglio per scoprire esattamente cosa sta cambiando sarebbe diff diffondere le attuali tabelle dei metadati. Il modo per ottenerli è utilizzare la finestra MetaInfo di ildasm:

View > MetaInfo > Raw:Header,Schema,Rows // important, otherwise you get very basic info from the next step

View > MetaInfo > Show!

Altri suggerimenti

Penso che sarebbe il campo TimeDateStamp nell'intestazione IMAGE_FILE_HEADER delle Specifiche PE32 .

Potrebbe essere che i numeri di build o di revisione siano cambiati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top