CSharpCodeProviderを使用して、一時的な使用のみを目的として、メモリ内に新しい名前空間をコンパイルおよび生成しました。ただし、次に生成されるコードが、生成されるすべてのクラスとメソッドの同じ識別子をオーバーライドできるようにするには、この名前空間を一定期間後にメモリから削除する必要があります。
質問する
701 次
3 に答える
1
とんでもない。クラスのアンロードは、AppDomainをアンロードするときにのみ発生します-注意-。
最善の策は、子アプリドメインですべてのコード生成を行うことです(同じプロセスになります)が、それは簡単ではありません(子アプリドメインには、リモート処理によって到達可能なすべてのオブジェクトのプロキシが必要です)。
于 2012-12-27T09:42:24.220 に答える
1
ロードされたタイプをアンロードできる方法は1つだけです。それは、収集可能なアセンブリの一部である場合です。
ただし、収集可能なアセンブリは、CSharpCodeProviderではなく、Reflection.Emitを介してのみ作成できます。そのため、収集可能なアセンブリを使用することがあなたの選択肢であるかどうかはわかりません。そうでない場合は、他のオプション(AppDomainのアンロードなど)が必要になります。
于 2012-12-27T18:59:05.463 に答える
0
- 生成されたアセンブリを子AppDomainにロードします
- デフォルトのAppDomainを呼び出すには、クロスドメイン整流に参照プロキシによってマーシャリングされたものを使用します
- または、名前付きパイプバインディングでWCFを使用します
- 子AppDomainをアンロードします
于 2012-12-28T04:23:54.463 に答える