2 つの .NET アセンブリを比較して、それらが「同じ」ソース ファイルからビルドされたかどうかを判断する方法を知っている人はいますか?
Reflector のプラグインなど、いくつかの差分ユーティリティが利用できることは承知していますが、GUI で差分を表示することに興味はありません。同じ (または同等の) ソース ファイル。複数の異なるソース ファイルが同じ IL を生成する可能性があることを理解しており、そのプロセスは元のソースではなく、IL の違いにのみ影響を受けることを認識しています。
2 つのアセンブリのバイト ストリームを比較するだけの主な障害は、.NET にアセンブリに "MVID" (Module Version Identifier) と呼ばれるフィールドが含まれていることです。これは、コンパイルごとに異なる値を持つように見えるため、同じコードを 2 回ビルドすると、アセンブリが異なります。
関連する質問は、コンパイルごとにMVIDを強制的に同じにする方法を知っている人はいますか? これにより、MVID の値の違いに影響されない比較プロセスを使用する必要がなくなります。標準のチェックサムを使用できることを意味するため、一貫した MVID が望ましいでしょう。
この背景には、本番環境へのリリースが許可される前に、サードパーティ企業がリリースを独自にレビューして承認する責任があるということがあります。これには、ソース コードのレビューが含まれます。彼らは、私たちが提供するソース コードが、私たちが以前に構築、テストし、現在展開を計画しているバイナリと一致することを独自に確認したいと考えています。私たちが提供するソースからシステムを独自に構築し、チェックサムをテスト済みのバイナリのチェックサムと比較できるプロセスを探しています。
ところで。継続的インテグレーション、自動ビルド、ソース管理などを使用していることに注意してください。この問題は、特定のビルドにどのソース ファイルが入ったかを内部で制御できないこととは関係ありません。問題は、サード パーティが、サード パーティに提供するソースが、テスト済みで本番環境に入れる予定のバイナリと同じバイナリを生成することを確認する責任があることです。ビルド サーバーやソース コード管理システムを含め、内部システムやコントロールを信頼するべきではありません。彼らが関心を持っているのは、ビルドに関連付けられたソースを取得し、ビルド自体を実行し、出力がデプロイしようとしているものと一致することを確認することだけです。
比較ソリューションの実行速度は特に重要ではありません。
ありがとう