2

バックグラウンド:

私は、AssemblyInfo を使用してバージョン番号を埋め込む dll と exe を比較する新しい方法を考え出そうとする責任を負っています。新しいビルドを行うたびに、それに応じてバージョンがインクリメントされます。ただし、新しいバージョンを展開するときは、実際に変更された dll と exe のみをコピーしたいのですが、バージョン番号が埋め込まれているため、常にそうであると思われます。

これを回避するために、システムは現在ファイルサイズの比較に依存していましたが、変更されたにもかかわらず新しいexeを展開できなかったため、これでは十分ではないように見えることに気付いたことが私の仕事です。たまたま同じファイルサイズになっているだけです。これがどのくらいの頻度で発生するかはわからないため、何らかの対策を講じる必要がありますが、可能であれば、ユーザーが毎回 UI をシャットダウンする必要がないように、DLL と EXE を置き換えることを引き続き賢く行いたいと考えています。実際には、UI が使用しないファイルを置き換えるだけで済みます。

したがって、私の質問は、そのメタデータ自体を無視しながら、AssemblyInfo を使用して、exe と dll を組み込みバージョンと比較する賢い方法があるかどうかです。調べれば調べるほど無理そうですが、諦めて全部交換する前に聞いてみる価値はあると思いました。

助けてくれてありがとう!

編集:私が本当に望んでいたことの1つは、特定のオフセットとのビットごとの比較を行うことだと思います。AssemblyInfo は、比較で説明できるヘッダーまたはフッターなど、特定の時点で常にコンパイルされますか?

4

2 に答える 2

3

Eric Lippert はすでにこれをカバーしています:

同じ C# プログラムを 2 回コンパイルすると、同じバイナリ出力が生成されることが保証されていますか?
いいえ
、まあ、それは書きやすいブログでした。
...
C# コンパイラは、設計上、同じバイナリを 2 回生成することはありません。C# コンパイラは、アセンブリを実行するたびに、新しく生成された GUID をすべてのアセンブリに埋め込みます。これにより、2 つのアセンブリが完全に同一になることはありません。

于 2012-10-31T14:42:26.717 に答える
2

すべてのファイルのバージョン番号を更新しないでください。むしろ、変更された特定のファイルのバージョンのみを更新してください。これには、ビルド プロセスにいくつかの変更が必要になりますが、問題は解決します。

于 2012-10-31T14:34:25.883 に答える