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