2009-08-26 14 views
11

C#アプリケーションを再コンパイルするたびに、異なるMD5シグネチャを持つEXEが生成されます。私たちは、同じマシンで、分単位で再コンパイルしています。同じソースコードで同じ出力が得られないのはなぜですか?これを修正する方法はありますか?C#が同じソースコードに対して異なるEXEを生成するのはなぜですか?

+0

あなたは既に持っていると思いますが... IL DASMでマニフェストをチェックしましたか? – yeyeyerman

答えて

17

「だから、すべてのアセンブリがあります。PDB 完全にランダムなGUIDがすべてのコンパイルを生成したと思われるもの

  • Aにマッチした二箇所
  • A GUIDで

    1. Aタイムスタンプを、次のVisual Studioビルドでのみ生成されるアセンブリのビルドを示すカウンタ。

    から:

    http://ritter.vg/#code_adventures_clr1

  • +0

    良い答え。ありがとう! – Gili

    2

    私はこれまでにこれらのケースを解読しなければならなかったので、ちょうどDateTimeスタンプタイプの変更(それは推測です)のようです。両方のアセンブリをdiffツールの下に置くと、PE内の非常に少数の行しか変更されていないことがわかります。少量のコードを変更してアセンブリを比較すると、大幅に大きな差異が見えます。ここで

    は表面的なものから、「本物」の違いを識別するためのツールを研究しながら、私は開いた質問です:

    .NET Assembly Diff/Compare Tool - What’s available?

    0

    すべてのビルドに変更されます内蔵のバージョン番号があります。

    +2

    アセンブリバージョンが静的に「1.0.0.0」のように設定されていても、ビルドバージョンが変更される唯一の時間は、「1.0.0。*」として定義されている場合、または手動で変更する場合です。 – STW

    +0

    アセンブリバージョンは既に静的な値に設定されています。 – Gili

    4

    私は鍵が "分離れている"と思う。 EXE内にタイムスタンプがある場合は、MD5シグネチャが変更されます。

    +0

    これは推測ですか? – Gili

    +0

    私はC#コンパイラによって生成されたEXEを調べたことはありません。私はC#に1年以上触れていません。しかし、それはすべてをうまく説明し、それは理にかなっています。 –

    2

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

    バージョン番号を定数アセンブリバージョンに切り替え、問題が修正されているかどうかを確認してください。

    2

    次の2つの.exesに(これは私のパスはC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\binある)Ildasm.exeを実行してみてください可能性があります。

    次に、ヘッダーの元のビューをダンプし、差分ツールと比較します。それでも違いがなければ、より高度なツールが必要なPEヘッダがあるかもしれません。 IldasmはあなたにPEヘッダーサイズとそれに関する他の統計を提供します。

    +0

    /sourceと/ outフラグの使用を強くお勧めします。 –

    関連する問題