不同机器上相同C#源代码的可重复构建
我正在尝试制作一个足够聪明的工具,通过编程检查由两台不同机器在不同时间编译的相同C#代码生成的发布版本二进制文件,并得出结论,代码是相同的,同时能够识别用于生成这些二进制文件的C#代码中存在的任何代码更改 我已经尝试了很多方法,但为了保持简短,我将坚持最新的尝试。 我在二进制文件上使用/text选项运行ildasm,并在文本中替换匿名字段等的GUID,但是当二进制文件来自不同的PC时,我发现ildasm/text选项生成的文本被重新排序。源于相同代码但在不同机器上由相同设置编译的二进制文件也出现了严重的重新排序。任何关于如何控制IL重新排序的建议都将不胜感激 干杯不同机器上相同C#源代码的可重复构建,c#,visual-studio,ildasm,C#,Visual Studio,Ildasm,我正在尝试制作一个足够聪明的工具,通过编程检查由两台不同机器在不同时间编译的相同C#代码生成的发布版本二进制文件,并得出结论,代码是相同的,同时能够识别用于生成这些二进制文件的C#代码中存在的任何代码更改 我已经尝试了很多方法,但为了保持简短,我将坚持最新的尝试。 我在二进制文件上使用/text选项运行ildasm,并在文本中替换匿名字段等的GUID,但是当二进制文件来自不同的PC时,我发现ildasm/text选项生成的文本被重新排序。源于相同代码但在不同机器上由相同设置编译的二进制文件也出现
PS:任何可靠实现这一点的替代策略都是最受欢迎的。等待Eric Lippert醒来:)-community wiki出自@mikez的评论: 当编译器团队中的主要开发人员(Eric Lippert)发言时,您应该倾听:包含详细的解释和不这样做的强烈建议(可能是为了回答这个精确的问题): 编译同一个C#程序两次是否保证生成相同的二进制输出? 没有
我发现,根据Eric Lippert在其帖子中提到的解决方案,可以通过将编译过程的处理器亲和力设置为01来实现客户最终的解决方案。在此之后,生成的可执行文件/DLL与使用的som mvid和GUID几乎完全相同。使用文本模式在这些二进制文件上运行ILDASM,并构建一个简单的哈希工具来去除这些随机内容,就提供了这样一个解决方案。我提供这些只是为了完成任务,并帮助其他可能面临此问题的人 你不能比较源代码,因为?…而且,这可能是相关的:如果可能的话,你能告诉我你为什么需要这样一个工具吗?对于您试图通过创建来解决的问题,可能有更好的解决方案。当编译器团队的主要开发人员发言时,您应该倾听:@Hardy msbuild对此有一个命令行参数maxcpucount。截至2016年2月(Roslyn编译器),这不再是事实:对于这种情况,有一个确定性选项。--这应该更新,因为我在MS文档页面之前登陆这里。