2012-07-05 15 views
6

異なる時刻に2つの別々のマシンでコンパイルされた同一のC#コードによって生成されたリリースバージョンのバイナリをプログラマチックに調べて、コードが同一であると結論付けるツールを作成しようとしています。これらのバイナリを生成するために使用されるC#コードにあれば、コードの変更を取得することができます。異なるマシン上で同じC#ソースコードから反復可能なビルド

私はいくつかのアプローチを試してきましたが、この短期間を維持するために、私は最新の試みに固執します。 バイナリで/ textオプションを指定してildasmを実行し、テキストの匿名フィールドなどのGUIDを置き換えますが、バイナリが異なるPCから来た場合、ILDASM/textオプションによって生成されたテキストが並べ替えられます。同じコードから生成されたものの、別のマシンで同じ設定でコンパイルされたバイナリも大きく並べ替えられて表示されます。このILの並べ替えをどのように制御することができるかもしれないと示唆しているでしょうか?

乾杯

PS

:確実にこれを達成する任意の代替戦略も大歓迎です。

+1

ソースコードを比較できないのはなぜですか? –

+0

また、これはおそらく関連性があります:http://stackoverflow.com/questions/1335427/why-does-c-sharp-generate-different-exes -for-the-same-source-code –

+1

可能であれば、なぜあなたはそのようなツールが必要なのか分かりますか?おそらく、あなたがそれを作成することによって解決しようとしている問題に対して、はるかに良い解決策があるでしょう。 –

答えて

2

私が見つかりました。それに応じたソリューション何エリックリペットの彼のクライアントが01にコンパイルプロセスのためのプロセッサアフィニティを設定することによって到達することができるためにセトリング終わったものを彼のポストに言及しました。この後、生成された実行可能ファイル/ dllは、使用されているmvidやguidとほぼ同じです。これらのバイナリ上でテキストモードでILDASMを実行し、このランダムなものを取り除くための単純なハッシュツールを構築することで、このような解決策が得られます。私は完成のためにこれを提供しているだけで、この問題に直面しているかもしれない他の人たちを助けるためです。

7

エリックリペットは、ウェイクアップするために:)待ち - @mikezのコメントのうちコミュニティのwiki:

コンパイラチームの主要開発者(エリックリペット)が話すとき、あなたは聞く必要がありますが:http://ericlippert.com/2012/05/31/past-performance-is-no-guarantee-of-future-results/は、詳細な説明が含まれています(この正確な質問に応答した可能性が高い)、それをやっていないため、強い勧告:

は二度同じバイナリ出力を生成することが保証同じC#プログラムをコンパイルしていますか?

号は

関連する問題