MEF
プラグインベースのASP.NETアプリケーションで使用しています。File System Watcher
新しいプラグインでの配線Container.Refresh()
は、プラグインフォルダにコピーされると自動的にロードされます。
問題は、ロードされたプラグインを削除または置換したい場合です。によってロックされてw3wp
おり、削除できません。読んだのですShadow Copy
が、良い例や記事が見つかりません。
MEF
プラグインベースのASP.NETアプリケーションで使用しています。File System Watcher
新しいプラグインでの配線Container.Refresh()
は、プラグインフォルダにコピーされると自動的にロードされます。
問題は、ロードされたプラグインを削除または置換したい場合です。によってロックされてw3wp
おり、削除できません。読んだのですShadow Copy
が、良い例や記事が見つかりません。
プラグインフォルダをAppDomainSetup.ShadowCopyDirectoriesに追加してみてください。このプロパティは、シャドウコピーを介してロードする必要があるアセンブリを含むディレクトリのセミコロンで区切られたリストです。
通常、AppDomainSetup.ShadowCopyFilesもに設定する必要があり"true"
ますが、これはASP.NETappdomainsのデフォルトになっていると思います。
ただし、プラグインの新しいバージョンをロードしても、古いバージョンが魔法のようにアンロードされないことに注意してください。これを行う唯一の方法は、それを含むAppDomainをアンロードすることです。これには別のappdomainにプラグインをロードする必要があるため、これはおそらく価値があるよりも厄介です。
サービスを停止し、DLLを更新して、再起動する方が、おそらくより簡単で、安全で、より効果的です。
管理されていないすべてのリソースを適切にクリーンアップしていることを確認してください。ファイルストリームを開いたが、適切に閉じたり破棄したりしなかったようです。これにより、最初にファイルストリームを操作していたプロセスによってファイルがロックされる可能性があります。using
ここでのステートメント の詳細: http ://www.blackwasp.co.uk/UsingStatement.aspx