当我做一个干净的构建我的C#项目时,生成的dll与之前构建的dll(我单独保存)不同.没有进行任何代码更改,只需清理和重建.
Diff显示DLL中的一些字节有变化 - 很少接近开始,很少接近结束,但我无法弄清楚这些代表什么.有没有人对这种情况发生的原因有什么见解以及如何预防?
这是使用Visual Studio 2005/WinForms.
更新:不使用自动版本递增或签署程序集.如果它是某种时间戳,如何防止VS写它?
更新:在查看Ildasm/diff之后,看起来以下项目有所不同:
PE头中的两个字节位于文件的开头.
字符串表的隐藏部分接近结束(不知道为什么,我没有改变字符串)
文件末尾的部件信息部分.
如果可能的话,不知道如何消除这些中的任何一个......
我最好的猜测是你看到的更改字节是在构建时自动生成的内部使用的元数据列.
一些Ecma-335分区II(CLI规范元数据定义)列可以更改每个构建,即使源代码根本没有变化:
Module.Mvid:构建时生成的GUID.每次构建时都要改变.
AssemblyRef.HashValue:如果您引用自旧版本以来已重建的另一个程序集,则可能会更改.
如果这真的非常困扰你,那么找到确切变化的最佳建议就是区分实际的元数据表.获取这些的方法是使用ildasm MetaInfo窗口:
View > MetaInfo > Raw:Header,Schema,Rows // important, otherwise you get very basic info from the next step View > MetaInfo > Show!
我认为这将是PE32规范的IMAGE_FILE_HEADER标头中的TimeDateStamp字段.