每当我们编译我们的C#应用程序时,我们结束了与不同的MD5签名EXE文件。 我们除了重新编译在同一台机器上,分钟。 为什么不相同的源代码产生相同的输出? 有没有办法来解决这个问题?
Answer 1:
“所以每一个组件具有:
- 时间戳,在两个位置
- 匹配的PDB的GUID
- 这似乎是一个完全随机的GUID生成的每个编译。
- 指出哪些组件的构建是反 - 只产生在后续的Visual Studio中建立“。
从:
http://ritter.vg/#code_adventures_clr1
Answer 2:
我认为关键有可能是“分钟的间隔”。 如果是EXE中的时间戳,那么这将改变MD5签名。
Answer 3:
我已经收到剖析这些情况下,它似乎只是日期时间戳记式的变化(这是一个猜测)。 如果你把两个组件进行下比较工具,你会看到只有极少数的PE线已经改变; 如果你改变甚至一个很小的代码量,并比较组件,你会看到显着差异较大。
下面是我,而研究工具来识别从肤浅的人“真正”的区别开了一个问题:
.NET程序集DIFF /比较工具-什么是可用?
Answer 4:
最有可能你有几个*的组件中的版本号。 这会导致组件的版本号是自动递增上生成,这将导致在所输出的组件的可见差异。 因此不同的MD5校验。
尝试切换的版本号为恒定的程序集版本,看看是否能解决问题。
Answer 5:
你可以尝试运行程序Ildasm.exe(我这个路径是C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin
)上的两个.EXE文件。
然后倾倒出标题的原始图,并将它们与一个diff工具比较。 如果仍然没有区别,那么它可能是这将需要更先进的工具来发现PE头。 ILDASM给你就可以了PE头部大小和其他的统计数据虽然。
Answer 6:
将有一个内置的版本号将与每次构建而改变。
文章来源: Why does C# generate different EXEs for the same source-code?