2

だから私は自分の Thread.GetDomain().GetAssemblies() 地域からアセンブリを削除しようとしています。

これまでにウェブでいくつかの説明を見てきましたが、それを理解することができませんでした.

これは私がこれまでに得たものです

AppDomain tempD = Thread.GetDomain();
tempD.DoCallBack(LoaderCallback);
AppDomain.Unload(tempD);
System.IO.File.Delete(assemblyName);

private static void LoaderCallback()
{
     Assembly.ReflectionOnlyLoad("myAssembly");

     //byte[] raw = System.IO.File.ReadAllBytes(test);
     //Assembly yacsi = Assembly.Load(raw);
     //((IScript)yacsi.CreateInstance("Script")).Go();
}

これまでこのコンセプトをいじってきましたが、コマンドThread.GetDomain();が含まれていないため、接続に苦労して いますUnload

((IScript)yacsi.CreateInstance("Script")).Go()また、アセンブリIScriptが何であるか、「スクリプト」テキストセクションに何を配置するかわからないため、この部分を試すことができませんでした

どんなアイデアでも大歓迎です

4

1 に答える 1

2

@RobertHarveyのコメントを上に追加し、一歩後退するには、別のものを作成しAppDomainてアセンブリをロードします。その後、使用するさまざまなタイプをドメインにマーシャリングできます。

作業が完了したら、アプリケーション ドメインをアンロードして、アセンブリを取り除くことができます。

ドメイン間のインスタンス マーシャリングは .NET Remoting を介して行われることに注意してください。そのため、マーシャリングされたオブジェクトの有効期間の時間値などを含むリモート リース ポリシーを試してみることをお勧めします。リース期間を変更する理由は、マーシャリングされたインスタンスが、まったく呼び出されていないか、まったく使用されていない場合、事前に定義された期間が経過すると期限切れになるためです。そのため、インスタンスを何度も再マーシャリングすることを避け、ドメイン内での寿命を延ばしたい場合があります。

これは、アセンブリを新しいアセンブリにロードしてアンロードする方法を示す良いサンプルだと思いますAppDomain。他にもたくさんのサンプルがあります。

プロセスがどうあるべきかを知っている限り、コードを見つけるのは簡単です。

于 2013-05-28T19:35:34.310 に答える