Por que é uma dll diferente produzidos após uma compilação limpa, sem alterações no código?

StackOverflow https://stackoverflow.com/questions/107196

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 ...

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top