为什么不同的DLL创建一个干净后产生的,而且没有更改代码?(Why is a different d

2019-06-24 17:05发布

当我做一个干净的构建我的C#项目,所产生的DLL是不同的,那么此前建立一个(我单独保存)。 没有代码进行了更改,只需清洁和重建。

DIFF显示了DLL一些字节有变化 - 近几年开始,很少接近尾声,但我不能找出这些代表。 是否有人对为什么发生这种情况以及如何防止它的见解?

这是使用Visual Studio 2005 /的WinForms。

更新:不使用自动版本递增,或签署大会。 如果它是某种形式的时间戳,如何防止我从VS写呢?

更新:在寻找ILDASM / DIFF之后,它看起来像下面的项目是不同的:

  • 在PE的两个字节的文件的起始头。
  • <PrivateImplementationDetails> {GUID}
  • 接近结束的字符串表的隐秘部分(不知道为什么,我没有改变弦)
  • 在文件的最后组装零件的信息。

不知道如何消除任何这些,如果可能的话...

Answer 1:

我最好的猜测是,你所看到的改变的字节是在编译时自动生成的内部使用的元数据列。

一些ECMA-335 II分区(CLI规范元数据定义)列,可以每构建改变,即使源代码完全不改变的:

  • Module.Mvid:构建时生成的GUID。 总是变化,每一个版本。
  • AssemblyRef.HashValue:如果你引用的是还因为老构建重建另一个组件可能会更改。

如果这是真的,你感到困扰,在发现了我最好的提示究竟是什么改变将是diff的实际元数据表。 得到这些问题的方法是使用ILDASM元信息窗口:

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

View > MetaInfo > Show!


Answer 2:

我认为这是在的IMAGE_FILE_HEADER头的TimeDateStamp领域PE32规格 。



Answer 3:

可能是因为构建或版本号已经改变。



文章来源: Why is a different dll produced after a clean build, with no code changes?