有没有办法比较两个.NET程序集以确定它们是否是从“相同”的源文件构建的?
我知道有一些差异工具可用,例如Reflector的插件,但我不想在GUI中查看差异,我只想自动比较一组二进制文件,以查看它们是否是从相同(或等效)的源文件构建的。我了解到多个不同的源文件可能会产生相同的IL,并意识到该过程仅对IL中的差异敏感,而不是原始源。
仅仅比较两个程序集的字节流的主要障碍在于.NET在程序集中包含一个名为“MVID”(模块版本标识符)的字段。这似乎对于每次编译都具有不同的值,因此如果您两次构建相同的代码,则程序集将不同。
相关问题是,有人知道如何强制MVID在每次编译时保持相同?这将避免我们需要具有对MVID值差异不敏感的比较过程。一致的MVID更好,因为这意味着可以使用标准校验和。
背景是,一个第三方公司负责在我们被允许发布到生产环境之前独立审查和签署我们的发行版,这包括审查源代码。他们希望独立确认我们提供的源代码与早期构建、测试和当前计划部署的二进制文件相匹配。我们正在寻找一个过程,允许他们独立从我们提供给他们的源代码中构建系统,然后将校验和与我们已经测试并计划放入生产环境中的二进制文件的校验和进行比较。
顺便说一句,请注意,我们正在使用持续集成、自动化构建、源代码控制等。问题与对给定构建使用了哪些源文件的内部控制不相关。问题在于第三方负责验证我们提供的源代码是否产生与我们测试并计划放入生产环境中的相同的二进制文件。他们不应该信任我们的任何内部系统或控件,包括构建服务器或源代码控制系统。他们只关心获取与构建相关联的源码,自己执行构建,然后验证输出是否与我们要部署的内容相匹配。
比较解决方案的运行速度并不特别重要。
谢谢。