C# アプリケーションを再コンパイルするたびに、異なる MD5 署名を持つ EXE が作成されます。同じマシンで数分間隔で再コンパイルしています。同じソースコードから同じ出力が得られないのはなぜですか? これを修正する方法はありますか?
6 に答える
「したがって、すべてのアセンブリには次のものがあります。
- 2 か所のタイムスタンプ
- PDB に一致する GUID
- コンパイルごとに生成される完全にランダムな GUID のように見えるもの。
- アセンブリのビルドが何であるかを示すカウンター - 以降の Visual Studio ビルドでのみ生成されます。"
から:
そこの鍵は「数分離れている」かもしれないと思います。EXE 内にタイムスタンプがある場合、MD5 署名が変更されます。
以前にこれらのケースを分析する必要がありましたが、DateTime-stamp タイプの変更にすぎないようです (推測です)。両方のアセンブリを diff ツールの下に置くと、PE 内のごく少数の行だけが変更されていることがわかります。少しでもコードを変更してアセンブリを比較すると、大幅に大きな違いが見られます。
これは、表面的な違いと「実際の」違いを識別するためのツールを調査しているときに開いた質問です。
ほとんどの場合、アセンブリのバージョン番号にいくつかの * があります。これにより、アセンブリのバージョン番号がビルド時に自動インクリメントされ、出力されたアセンブリに目に見える違いが生じます。したがって、異なる MD5 チェックサムです。
バージョン番号を一定のアセンブリ バージョンに切り替えて、問題が解決するかどうかを確認してください。
2 つの .exeで ildasm.exe (私のパスはC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin
) を実行してみてください。
次に、ヘッダーの生のビューをダンプし、差分ツールと比較します。それでも違いがない場合は、検出するためにより高度なツールが必要な PE ヘッダーである可能性があります。ただし、Ildasm は、PE ヘッダー サイズとその他の統計情報を提供します。
ビルドごとに変更される組み込みのバージョン番号があります。