次の展開構造があります。
deployment/
Service1.dll
Service2.dll
Service3.dll
Common.dll
Host.exe
起動時に、3 つのサービス dll が一時的な場所にコピーされ、私Assembly.LoadFrom
はそれらをそのように明示的にロードするために使用します。私のコードは変更を探し、deployment
これらのアセンブリは独自の AppDomain に読み込まれるため、それらをシャットダウンし、新しいバージョンをコピーして、再度起動することができます。これはうまくいきます。
私が抱えている問題は、これら 3 つのサービスすべてが依存していることですCommon.dll
(メインのホスト実行可能ファイルは依存していません)。起動時に、この一般的な dllも一時的な場所にコピーされますが、ホストは、deployment
一時的な場所ではなく 1 つを解決しています。
使用してみましAppDomainSetup.PrivateBinPath
たが、一時的な場所を指していましたが、展開フォルダー内の場所に解決されています。
展開フォルダーで解決しようとする前に、CLR が最初に一時フォルダーを参照するように強制する方法はありますか(他の依存関係はありますが、いわば「シャドウ」する必要はありません)。
編集:明確にするために、common.dll
が変更された場合、すべてのサービスが最初にアンロードされ、共通の dll への依存関係が解放されてから、3 つすべてがコピーされて再起動されます。