-1

dll を動的にロードしようとしている以下のコードが機能していません。

AppDomain appDomain = AppDomain.CreateDomain("DllDomain");
Assembly a = appDomain.Load(fileName);
//Assembly a = Assembly.LoadFrom(fileName);
objType = a.GetType(className);
obj = a.CreateInstance(className);
object[] args = new object[1];
args[0]=(object) "test";
object ret = objType.InvokeMember("Perform", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, args);
string output = ret.ToString();
obj = null;
AppDomain.Unload(appDomain);

これは私が WCF サービス内で使用しているコードですが、それでも機能しません。

AppDomain で「シャドウ コピー」を使用して実現できると聞きました。しかし、「シャドウコピー」と上記のコードで同じものを実装する方法については何も知りません。

「シャドウ コピー」の例として動作するコードを提供してください。

-BS

4

1 に答える 1

0

アセンブリをアプリケーション ドメインに読み込むことはできますが、そのドメインからアンロードすることはできません。

ただし、1 つのアプリケーション ドメインで 2 つ目のアプリケーション ドメインを作成し、2 つ目のアプリケーション ドメインにアセンブリを読み込むことができます。後で、2 番目のアプリケーション ドメインをアンロードすることを選択できます。これにより、2 番目のアプリケーション ドメインに読み込んだアセンブリがアンロードされます。

これが基本原則です。実際には、特にアプリケーション ドメイン間で何らかの形式の通信をセットアップするときに、解決すべき多くの障害 (.NET のバージョンによって変更されました) が見つかります。

ここで動作するコードを提供すると、サイズが大きすぎる可能性があります。

于 2010-08-05T09:26:46.537 に答える