0


0

たとえば、ライブラリAとライブラリBを参照するアプリAがあります。 さらに、ライブラリA自体が異なるバージョンのライブラリBを参照しています。 (これらはすべてC#です)

すべての参照がバイナリDLLファイルを指すようにします。 今のところlibフォルダがあります。

lib / LibA / v1 / LibA_1.dll lib / LibB / v1 / LibB_1.dll lib / LibB / v2 / LibB_2.dll

アプリがLibA v1とLibB v2を参照しているとしましょうが、LibA自体はLibB v1に依存します。 可能であれば、これを設定するための「正しい」方法は何ですか? GACを避け、手動でファイルをいじるのを最小限に抑えたいのです。というのは、libフォルダツリーがあれば、開発者はsvnからapp Aをチェックアウトしてパスや参照を変更せずに構築できるからです。チェックアウトされた。

現時点では、Visual StudioがLibAのバージョンのLibBを出力ディレクトリにコピーしていないことに気付きました。 ファイル名の違いは十分ですか、それともアセンブリ自体のバージョンを変更する必要がありますか?

1 Answer


1


これを正しく行う方法は、http://www.microsoft.com/downloads/details.aspx?familyid = 22914587-b4ad-4eae-87cf-b14ae6a939b0を使用することです。 LibA_1をコンパイルするときは、ILMergeを使用してLibB_1をLibA_1 dllファイルに静的にマージします。 あなたのアプリケーションはLibA_1とLibB_2を参照するでしょうし、LibA_1が実際にはそのDLLファイルにLibB_1が埋め込まれているのは賢いことではないでしょう。 私は以前にこのアプローチを使ったことがあり、それはとてもうまくいった。

LibA_1をLibB_2を使用するようにアップグレードする準備ができていない限り、これが本当に唯一の選択肢です。 LibB_1とLibB_2が大きく異なる場合は、LibA_1のアップグレードに時間がかかる可能性があります。