为什么C#生成相同的源代码不同的EXE文件?(Why does C# generate differ

2019-07-03 18:58发布

每当我们编译我们的C#应用​​程序时,我们结束了与不同的MD5签名EXE文件。 我们除了重新编译在同一台机器上,分钟。 为什么不相同的源代码产生相同的输出? 有没有办法来解决这个问题?

Answer 1:

“所以每一个组件具有:

  1. 时间戳,在两个位置
  2. 匹配的PDB的GUID
  3. 这似乎是一个完全随机的GUID生成的每个编译。
  4. 指出哪些组件的构建是反 - 只产生在后续的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?