Por que é uma dll diferente produzidos após uma compilação limpa, sem alterações no código?
-
01-07-2019 - |
Pergunta
Quando eu faço uma limpeza meu projeto C #, a dll produzida é diferente do anterior, já construído (o que eu salvo separadamente). Nenhuma alteração de código foram feitas, apenas limpar e reconstruir.
Diff mostra alguns bytes na DLL ter mudanças - alguns perto do início e alguns perto do fim, mas eu não consigo descobrir o que estes representam. Alguém tem insights sobre por que isso está acontecendo e como evitá-lo?
Esta é usando o Visual Studio 2005 / WinForms.
Update: Não usar versão automática incrementar, ou assinar o assembly. Se é um timestamp de algum tipo, como posso evitar que o VS de escrevê-lo?
Update: Depois de olhar em Ildasm / diff, parece que os seguintes itens são diferentes:
- dois bytes em PE cabeçalho no início do arquivo.
-
{ guid } seção - parte Cryptic da tabela de cadeia perto do final (maravilha porque, eu não mudar as cordas)
- Peças de informações de montagem no final do arquivo.
Não faço ideia como para eliminar qualquer destes, se possível ...
Solução
Meu melhor palpite seria o mudou bytes que você está vendo são as colunas de metadados internamente usados ??que são automaticamente geradas em tempo de compilação.
Alguns dos Ecma-335 Partition II (CLI Especificação Definição de metadados) colunas que podem mudar per-build, mesmo que o código fonte não muda em tudo:
- Module.Mvid: Uma compilação de tempo gerado GUID. Sempre muda, cada compilação.
- AssemblyRef.HashValue:. Poderia mudar se você está referenciando um outro conjunto que também tem sido reconstruído desde a antiga construção
Se isso realmente incomoda você, meu melhor ponta em descobrir exatamente o que está mudando seria diff as tabelas de metadados reais. A maneira de obter esses casos é usar a janela de ildasm metainfo:
View > MetaInfo > Raw:Header,Schema,Rows // important, otherwise you get very basic info from the next step
View > MetaInfo > Show!
Outras dicas
Eu acho que seria o campo TimeDateStamp no cabeçalho IMAGE_FILE_HEADER das especificações PE32 .
Pode ser que os números de compilação ou revisão mudaram.