c# - 从不同机器上的相同 C# 源代码可重复构建

标签 c# visual-studio ildasm

我正在尝试开发一种足够智能的工具,它能够以编程方式检查由在不同时间在两台不同机器上编译的相同 C# 代码生成的发布版本二进制文件,并得出代码相同的结论,同时能够获取任何代码更改,如果存在于用于生成这些二进制文件的 C# 代码中。

我尝试过使用多种方法,但为了保持简短,我将坚持使用最新的尝试。 我在二进制文件上使用/text 选项运行 ildasm,并替换文本中匿名字段等的 GUID,但是当二进制文件来自不同的 pc 时,我发现 ILDASM/text 选项生成的文本被重新排序。源自相同代码但在不同机器上由相同设置编译的二进制文件也出现严重重新排序。任何有关如何控制 IL 重新排序的建议都将不胜感激?

干杯

PS:我们也欢迎任何能够可靠地实现这一目标的替代策略。

最佳答案

等待 Eric Lippert 醒来 :) - 来自@mikez 评论的社区维基:

当编译器团队的主要开发人员 (Eric Lippert) 讲话时,您应该听:http://ericlippert.com/2012/05/31/past-performance-is-no-guarantee-of-future-results/包含详细的解释和不这样做的强烈建议(可能是为了回答这个确切的问题):

Is compiling the same C# program twice guaranteed to produce the same binary output?

No.

关于c# - 从不同机器上的相同 C# 源代码可重复构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11339086/

相关文章:

c# - lambda 表达式语法与 LambdaExpression 类

asp.net-mvc - 在 ASP.NET MVC 项目和 Cordova 项目之间共享代码

C# List 加入列表并从另一个列表中过滤

c# - 如何检查邮件是否有附件(MailKit)

visual-studio-2010 - 在 Visual Studio 构建后事件中删除整个文件夹

visual-studio - Visual Studio 2015 社区 Xamarin 跨平台模板缺失

.net - 不同类型在 CIL 中具有相同的签名

c# - 基于可为空类型的对象仅在对象为非空时才装箱

c# - 如何将 ReadOnlyCollection<T> 转换为 T[]?