每次我们重新编译C#应用程序时,我们都会得到具有不同MD5签名的EXE。我们在相同的机器上重新编译,相隔几分钟。为什么相同的源代码不会产生相同的输出?有办法解决这个问题吗?
答案 0 :(得分:18)
“所以每个集会都有:
从:
答案 1 :(得分:4)
我认为关键可能是“分开”。如果EXE中有时间戳,则会改变MD5签名。
答案 2 :(得分:2)
我之前必须解剖这些案例,它似乎只是DateTime-stamp类型的更改(这是猜测)。如果将两个组件放在diff工具下,您将看到PE中只有极少数行已更改;如果您更改了少量代码并比较了程序集,您将看到更大的差异。
这是我在研究工具时打开的一个问题,以确定与表面上的“真实”差异:
答案 3 :(得分:2)
很可能你在程序集的版本号中有几个*。这会导致组件版本号在构建时自动递增,这将导致输出组件中的可见差异。因此,MD5校验和不同。
尝试将版本号切换为常量汇编版本,看看是否能解决问题。
答案 4 :(得分:2)
您可以尝试在两个.exes上运行ildasm.exe(我的路径为C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin
)。
然后转出标题的原始视图,并将它们与diff工具进行比较。如果仍然没有区别,那么可能需要更高级工具才能发现的PE头。 Ildasm为您提供了PE头大小和其他统计信息。
答案 5 :(得分:0)
每个版本都会有一个内置的版本号。