可重复在不同的机器上使用相同的C#源代码构建

时间:2012-07-05 06:46:23

标签: c# visual-studio ildasm

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

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

干杯

PS:任何可靠地实现这一目标的替代策略也是最受欢迎的。

2 个答案:

答案 0 :(得分:7)

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

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

  

两次编译相同的C#程序是否保证产生相同的二进制输出?

     

没有

答案 1 :(得分:2)

我发现根据Eric Lippert在帖子中提到的客户最终解决的问题的解决方案可以通过将编译过程的处理器亲和性设置为01来实现。之后生成的可执行文件/ dll几乎相同在使用sv mvid和guids的情况下。使用文本模式在这些二进制文件上运行ILDASM并构建一个简单的散列工具来去除这些随机的东西提供了这样的解决方案。我只是为了完成而提供这个,并帮助那些可能面临这个问题的人。