C#プロジェクトを2回コンパイルすると、2つのアセンブリが得られます。これらのアセンブリはまったく同じではありません(バイナリdiffを使用)。私はこれがなぜそうであるのか理由を考えることができますが、実際には2つのアセンブリのソースが同一であるということがあります。.NETアセンブリをどのように修正できますか?
私は、これらのアセンブリ間にパッチを作成し、顧客のマシンにパッチを適用することに懸念しています。
私はパッチを作成して適用することができるライブラリ(できれば.NET)またはツールを知っている人はいますか?
理想的には、プロジェクトレベルで依存関係を変更したり、ソースの数行をひねるような小さな変化を、処理する必要があります。この場合、アセンブリを完全に置き換えることができれば幸いですから、大きな変更に対処する必要はありません。
更新:
私はもう少し背景は私が取得していますどのような明確に役立つかもしれないと思います。私は、アプリケーションを構築するための継続的な統合サーバーを持っています。ビルド番号とビルドしているバージョンを反映するようにファイルとアセンブリのバージョンを変更します。私は違ったことをすることができましたが、これは私が好きな選択です。
これにより、アプリケーションをビルドするときにアセンブリ参照が変更されますが、それには満足しています。私は今、以前にリリースされたバージョンにアップデートを配布することに懸念しています。私はInstallShieldを使用してアップデートをビルドします。 InstallShieldで使用可能なアセンブリは、小さなパッチに縮小されています。これらは更新のサイズを大きくは増やしません。
私のアプリケーションには、基本的に暗号化されたアーカイブを含むデータファイルがいくつかあります。 InstallShieldはこれらのアセンブリへのアクセス権を持っておらず、私のアーカイブを理解していません。それを解読して抽出する方法は知られていません。以前のアーカイブで変更されたファイルを見つけ出し、それらを新しい更新バージョンに置き換える独自のパッチルーチンを作成しました。基本的に検索と置換戦略。
1つのアーカイブには、これらのアセンブリのほぼ百(と成長)を含み、これらのアセンブリのいくつかは、資源として大きなデータファイルが含まれています。これらのアセンブリは、アプリケーションの一部であるアセンブリに依存します。それらはまた、継続的な統合構築中にコンパイルされます。ビルド中にそれらをコンパイルしないと、依存関係の問題の余地が残るでしょう。私はそれを試して管理するつもりはありません。パッチを作成するたびに、これらのアセンブリがすべて含まれています。私は現在、これらのアセンブリのパッチを生成することによってパッチサイズを減らすオプションを検討しています。
タイムスタンプは、コンパイルされたアセンブリに含まれています。これは、コンパイルするたびに変更される理由です。 – Cheeso
また、なぜ「小さな変更」のためにアセンブリを修正したいのですが、なぜ「大きな変更」の代わりにそれらを置き換えることができますか? 1つの更新手順を使用するだけではなく、アセンブリを交換してください。 – Cheeso
Hm、ソースが同じ場合、なぜお客様のマシンでアセンブリを変更する必要がありますか?バージョン番号が同じであることを確認してください(AssemblyVersion属性に "*"がない場合)。 "古い"アセンブリも同様に使用できるはずです... – MartinStettner