Tag: 二进制再现性

我可以在构建.net程序集时指定模块版本ID(MVID)吗?

我们有一些共享程序集,每晚都会自动构建。 如果没有对源进行任何更改,我希望程序集二进制文件与以前的版本完全相同。 但是,程序集之间似乎存在细微差别。 我已经做了一些努力来确定两个版本之间的区别。 我使用ildasm生成il版本,并比较生成的文本版本。 唯一的区别(在IL中)是模块中的MVID(随机guid)。 一些谷歌搜索告诉我模块版本ID由编译器生成,因此可以确定构建源,即使其他所有内容都相同。 这个MVID在相同代码的构建之间创建了一个人工差异,并且对所得到的程序集进行了人工检查。 是否可以将MVID提供给C#编译器?

为什么C#为相同的源代码生成不同的EXE?

每次我们重新编译C#应用程序时,我们都会得到具有不同MD5签名的EXE。 我们在相同的机器上重新编译,相隔几分钟。 为什么相同的源代码不会产生相同的输出? 有没有办法来解决这个问题?