Prism を WPF で使用して、ユーザーが使用したいモジュールをリポジトリから選択できるようにしたいと考えています。各モジュールは基本的にアドオンであり、使用するモジュールを選択すると、それを DLL の「モジュール」フォルダーに移動してロードするだけです。
ただし、アプリケーションの実行中に DLL を移動しようとすると、その時点で DLL が使用されているため、エラーがスローされます。これを回避し、ユーザーが自由にモジュールを追加/削除できるようにするにはどうすればよいでしょうか?
アセンブリがにロードされると、が破棄さAppDomain
れるまでアンロードされません(できません) ....それがあなたの問題だと思います。AppDomain
あなたがネットを見ればそれを回避するためのいくつかのテクニックがあります.....
追加を作成し、AppDomain
アセンブリをロードできます。終了したら、を呼び出しUnload
てシャットダウンするAppDomain
と、アセンブリが解放されます。
ただし、オブジェクトをリモート可能にするために、他のタイプからアクセスできるようにする必要がありAppDomains
ますMarshalByRefObject
。他のAppDomainからの呼び出しをマーシャリングできます。
ここで非常に興味深いテクニック....MemoryStream
最初にアセンブリをロードし、次に.NETにアセンブリをロードしますMemoryStream
...つまり、ディスク上の「ファイル」はロックされていません。