当我做一个干净的构建我的C#项目,所产生的DLL是不同的,那么此前建立一个(我单独保存)。 没有代码进行了更改,只需清洁和重建。
DIFF显示了DLL一些字节有变化 - 近几年开始,很少接近尾声,但我不能找出这些代表。 是否有人对为什么发生这种情况以及如何防止它的见解?
这是使用Visual Studio 2005 /的WinForms。
更新:不使用自动版本递增,或签署大会。 如果它是某种形式的时间戳,如何防止我从VS写呢?
更新:在寻找ILDASM / DIFF之后,它看起来像下面的项目是不同的:
- 在PE的两个字节的文件的起始头。
- <PrivateImplementationDetails> {GUID}部
- 接近结束的字符串表的隐秘部分(不知道为什么,我没有改变弦)
- 在文件的最后组装零件的信息。
不知道如何消除任何这些,如果可能的话...
我最好的猜测是,你所看到的改变的字节是在编译时自动生成的内部使用的元数据列。
一些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!
我认为这是在的IMAGE_FILE_HEADER头的TimeDateStamp领域PE32规格 。