2011-07-09 12 views
1

カスタムAppDomainをアンロードした後、このAppDomain内にロードされたアセンブリ(ハードディスクから)を削除したいとします。 Assembly.Load(byte [])を使用してアセンブリをロードすることを提案するリソースが多数見つかりました。これを行うと、ファイルを削除することができますが、私のコードはこのロードされたアセンブリを使用しません。未処理のバイト配列を使用せずにAppDomainでアセンブリをアンロードする

基本的に私は、2つのアセンブリを持っている:A.DLLとB.DLL

A.DLLはB.DLLを参照し、B.DLLに呼び出すために望んでいます。

私のカスタムAppDomainでは、Assembly.LoadFrom経由でA.dllとB.dllの両方を読み込みます。次に、Aでメソッドを呼び出すと、ロードされたBに自動的に呼び出されます。

グローバルAppDomainでは、AとBの両方が既にロードされていますが、グローバルAppDomainにロードされたB.dllのバージョンはカスタムAppDomainでロードしたいものと同じではありません。 Assembly.LoadFromメソッドを使用

が呼び出しを行うAssembly.Load(バイト[])メソッドを使用してB

の正しいバージョンは、グローバルアプリケーションドメインにある呼Bのバージョンを作ります。

私が欲しいのは、A.dllをバイト[]としてロードし、Bが正しく参照するか、またはA.DllにAssembly.LoadFromをロードすることですが、AppDomainをアンロードした後に削除できます。

どのようにこれを達成するためのアイデアはありますか?

おかげで、 クリスチャン

答えて

0

私は1つのアプローチは、新しいアプリケーションドメインを作成して、新しいドメインにアセンブリをロードするために、「シャドウコピー」を使用することであると信じています。その後、アセンブリを削除することができます。

参照: AppDomain shadow copying not working (original assemblies locked)

関連する問題