最初に、この質問をする理由について少し背景を説明します。
私は現在、厳しく規制された業界で働いているので、私たちのコードは公式のテストハウスによって非常に注意深く見守られています。これらのテストハウスは、コードをビルドして、毎回まったく同じである.exeまたは.dllを生成できることを期待しています(明らかにコードを変更する必要はありません!)。作成した実行可能ファイルのMD5とSHA1をチェックして、これを確認します。
この時点まで、私は主にC ++でコーディングしてきましたが、(いくつかのプロジェクト設定を微調整した後)プロジェクトを同じMD5/SHA1に一貫して再構築することができました。現在、プロジェクトでC#を使用していますが、再構築後にMD5を一致させるのに非常に苦労しています。ファイルのPEヘッダーに「タイムスタンプ」があり、それらが0にクリアされていることを認識しています。また、.exeのGUIDがあり、これも000000にクリアされていることも認識しています。 ...など。ただし、ファイルはまだ一致していません。
CFF Explorerを使用してPEヘッダーを表示および編集し、時刻と日付のスタンプを削除しています。バイナリ比較ツールを使用した後、.exeには異なる(両方とも非常に小さい)バイトのブロックが2つしかありません。
不整合なブロックの1つは、ASCIIでファイルのパスを詳細に示すバイナリコードの直前*Project*\obj\Release\xxx.pdb
に表示されます。
編集:これは* .pdbファイルのGUIDであることがわかっていますが、エラーを発生させずに変更できるかどうかはまだわかりません!?
もう1つのブロックは、関数名のように見えるものの中央に表示されます。(典型的なセクション)AssemblyName.GetName.Version.get_Version.System.IO.Ports.SerialPort.Parity.Byte.<PrivateImplementationDetails>{
次に、別のコードブロック:
4A134ACE-D6A0-461B-A47C-3A4232D90816
に続く:
"} .ValueType .__ StaticArrayInitTypeSize=7。$$method0x60000ab-1.RuntimeFieldHandle.InitializeArray`...など。
どんなアイデアや提案も大歓迎です!