私は 2 つのプロジェクトを含むソリューションを持っています: と呼ばれるクラス ライブラリとpluginと呼ばれるコンソール アプリですmyconsole。どちらもNuGetパッケージを使用していますlog4net. 次の要件を満たす必要があります。
myconsoleは参照できませんがplugin.dll、実行時にリフレクションを介してロードする必要がありますplugin.dllと呼ばれるディレクトリで利用可能でなければなりませんplugins。myconsole.exelog4net.dllと呼ばれるディレクトリで利用可能でなければなりませんdlls。myconsole.exe
IDE でソリューションをビルドするときに、この配置を行う必要があります。理想的には、次のファイル構造を IDE ビルドで生成する必要があります。
[Z:\Staging]
- [Dlls]
- log4net.dll
- [Plugins]
- plugin.dll
- myconsole.exe
各プロジェクトを更新し、ビルド後に実行される MSBuild ターゲットを追加して、出力ディレクトリ ( bin\debug) の内容を必要な宛先ディレクトリにコピーすることを考えていました。このアプローチにはいくつかの問題があります。
- 展開要件が異なるプロジェクトをさらに追加する必要がある場合、うまくスケーリングできません。
- プロジェクトが並行してビルドされている場合、両方を
log4net.dll同じ場所にコピーする必要があります。これが同時に発生すると、ファイルが使用中であり、再試行が試行されるため、警告が表示されます。最終的にはうまくいきますが、私は何か間違ったことをしているというヒントとしてそれを取ります。これを回避するには、プロジェクトの出力をフィルター処理して、プロジェクトによって生成されたもののみをデプロイします。つまり、 and のみをデプロイできますが、 はデプロイできmyconsole.exeませplugin.dllんlog4net.dll。おそらく両方のプロジェクトが完了した後、これを手動で展開する必要があります (ソリューションレベルのイベント?)。これは複雑すぎるようです...
これを MSBuild で実装する正しい方法は何ですか?