1

MEFプラグインベースのASP.NETアプリケーションで使用しています。File System Watcher新しいプラグインでの配線Container.Refresh()は、プラグインフォルダにコピーされると自動的にロードされます。

問題は、ロードされたプラグインを削除または置換したい場合です。によってロックされてw3wpおり、削除できません。読んだのですShadow Copyが、良い例や記事が見つかりません。

4

2 に答える 2

1

プラグインフォルダをAppDomainSetup.ShadowCopyDirectoriesに追加してみてください。このプロパティは、シャドウコピーを介してロードする必要があるアセンブリを含むディレクトリのセミコロンで区切られたリストです。

通常、AppDomainSetup.ShadowCopyFilesもに設定する必要があり"true"ますが、これはASP.NETappdomainsのデフォルトになっていると思います。

ただし、プラグインの新しいバージョンをロードしても、古いバージョンが魔法のようにアンロードされないことに注意してください。これを行う唯一の方法は、それを含むAppDomainをアンロードすることです。これには別のappdomainにプラグインをロードする必要があるため、これはおそらく価値があるよりも厄介です。

サービスを停止し、DLLを更新して、再起動する方が、おそらくより簡単で、安全で、より効果的です。

于 2011-06-12T12:06:16.870 に答える
0

管理されていないすべてのリソースを適切にクリーンアップしていることを確認してください。ファイルストリームを開いたが、適切に閉じたり破棄したりしなかったようです。これにより、最初にファイルストリームを操作していたプロセスによってファイルがロックされる可能性があります。usingここでのステ​​ートメント の詳細: http ://www.blackwasp.co.uk/UsingStatement.aspx

于 2011-06-12T12:18:19.583 に答える