13

C# アプリケーションを再コンパイルするたびに、異なる MD5 署名を持つ EXE が作成されます。同じマシンで数分間隔で再コンパイルしています。同じソースコードから同じ出力が得られないのはなぜですか? これを修正する方法はありますか?

4

6 に答える 6

18

「したがって、すべてのアセンブリには次のものがあります。

  1. 2 か所のタイムスタンプ
  2. PDB に一致する GUID
  3. コンパイルごとに生成される完全にランダムな GUID のように見えるもの。
  4. アセンブリのビルドが何であるかを示すカウンター - 以降の Visual Studio ビルドでのみ生成されます。"

から:

http://ritter.vg/#code_adventures_clr1

于 2009-08-26T15:25:34.917 に答える
4

そこの鍵は「数分離れている」かもしれないと思います。EXE 内にタイムスタンプがある場合、MD5 署名が変更されます。

于 2009-08-26T15:12:30.900 に答える
2

以前にこれらのケースを分析する必要がありましたが、DateTime-stamp タイプの変更にすぎないようです (推測です)。両方のアセンブリを diff ツールの下に置くと、PE 内のごく少数の行だけが変更されていることがわかります。少しでもコードを変更してアセンブリを比較すると、大幅に大きな違いが見られます。

これは、表面的な違いと「実際の」違いを識別するためのツールを調査しているときに開いた質問です。

.NET アセンブリ Diff/Compare ツール - 何が利用できますか?

于 2009-08-26T15:10:27.583 に答える
2

ほとんどの場合、アセンブリのバージョン番号にいくつかの * があります。これにより、アセンブリのバージョン番号がビルド時に自動インクリメントされ、出力されたアセンブリに目に見える違いが生じます。したがって、異なる MD5 チェックサムです。

バージョン番号を一定のアセンブリ バージョンに切り替えて、問題が解決するかどうかを確認してください。

于 2009-08-26T15:21:43.253 に答える
2

2 つの .exeで ildasm.exe (私のパスはC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin) を実行してみてください。

次に、ヘッダーの生のビューをダンプし、差分ツールと比較します。それでも違いがない場合は、検出するためにより高度なツールが必要な PE ヘッダーである可能性があります。ただし、Ildasm は、PE ヘッダー サイズとその他の統計情報を提供します。

于 2009-08-26T15:30:30.443 に答える
0

ビルドごとに変更される組み込みのバージョン番号があります。

于 2009-08-26T15:10:41.153 に答える