在不同的计算机上构建两个完全匹配的C#项目总是生成相同的可执行文件吗

本文关键字:项目 可执行文件 构建 计算机 两个 | 更新日期: 2023-09-27 17:57:52

这是假设两台计算机都将完全相同的C#.NET项目从一台计算机复制到另一台计算机。当您在两台计算机上构建项目时,可执行文件是否完全相同?如果没有,有什么区别?

我问的原因是为了验证源代码是否与可执行文件匹配。这是为了向那些愿意自己构建程序的用户保证,它是完全匹配的。

在不同的计算机上构建两个完全匹配的C#项目总是生成相同的可执行文件吗

引用Eric Lippert:

没有。

那是一个很容易写的博客。

有一个GUID被称为";Mvid";包括在构建时,以确保每个构建都是不同的。此外,C#编译器不能保证每次运行时都能写入相同的指令。但在实践中,在足够相似的环境中(对于"相似"的一些定义),我希望它能。

您可以告诉用户这一点,并允许他们检查差异。如果唯一的区别是Mvid,那么它们就完成了。如果还有其他更改,那么他们需要检查IL代码的功能,以确保它与您的代码等效。(这可以通过像ILSpy这样的反编译器变得更容易)

如果他们有这种偏执狂,最好的办法可能就是每次都从源代码开始构建,并使用自己的构建。但我确实理解能够审计它的有用性,例如,你想知道官方的TrueCrypt或比特币客户端是合法的。