gpt4 book ai didi

.net - 确定 .NET 程序集是否是从同一源构建的

转载 作者:行者123 更新时间:2023-12-03 09:26:41 24 4
gpt4 key购买 nike

有谁知道比较两个 .NET 程序集以确定它们是否是从“相同”源文件构建的方法?

我知道有一些可用的差异实用程序,例如 Reflector 的插件,但我对查看 GUI 中的差异不感兴趣,我只想要一种自动化的方式来比较二进制文件的集合,看看它们是否是从相同(或等效)的源文件。我知道多个不同的源文件可以生成相同的 IL,并且意识到该过程只会对 IL 中的差异敏感,而不是原始源。

仅比较两个程序集的字节流的主要障碍是 .NET 在程序集中包含一个名为“MVID”(模块版本标识符)的字段。这似乎对每次编译都有不同的值,所以如果你构建相同的代码两次,程序集会有所不同。

一个相关的问题是,有谁知道如何强制每个编译的 MVID 相同?这将避免我们需要一个对 MVID 值差异不敏感的比较过程。一致的 MVID 更可取,因为这意味着可以使用标准校验和。

这背后的背景是,在我们被允许发布到生产环境之前,第三方公司负责独立审查和签署我们的发布。这包括审查源代码。他们希望独立确认我们提供给他们的源代码与我们之前构建、测试和当前计划部署的二进制文件相匹配。我们正在寻找一种流程,使他们能够从我们提供给他们的源代码独立构建系统,并将校验和与我们测试过的二进制文件的校验和进行比较。

顺便提一句。请注意,我们正在使用持续集成、自动构建、源代码控制等。该问题与内部缺乏对特定构建中的源文件的控制无关。问题是第三方负责验证我们提供给他们的源是否产生了我们已经测试并计划投入生产的相同二进制文件。他们不应该信任我们的任何内部系统或控制,包括构建服务器或源代码控制系统。他们所关心的只是获取与构建相关联的源,自己执行构建,并验证输出是否与我们所说的部署相匹配。

比较解决方案的运行速度并不是特别重要。

谢谢

最佳答案

使用命令行工具从 IL 的文本表示中过滤掉 MVID 和日期时间戳并不是太痛苦。假设 file1.exe 和 file2.exe 是从相同的源构建的:

c:\temp> ildasm/all/text file1.exe | find/v "时间-日期戳:"|查找/v "MVID"> file1.txt

c:\temp> ildasm/all/text file2.exe | find/v "时间-日期戳:"|查找/v "MVID"> file2.txt

c:\temp> fc file1.txt file2.txt

比较文件 file1.txt 和 FILE2.TXT

FC:没有遇到任何差异

关于.net - 确定 .NET 程序集是否是从同一源构建的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2940857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com