10

いくつかの C# コード (「スクリプト」と呼びましょう) があり、実行時にコンパイルしています。その関数にアクセスするために使用するメイン プログラムのインターフェイスを使用します。コンパイルが完了したらCompilerResults.CompiledAssembly、その場合はできCreateInstance(Type)ます。

スクリプトの使用が完了したら、完全にアンロードしたいと思います。私が理解していることから、別のアプリ ドメインを作成する場合にのみこれを行うことができます: 別の AppDomain への DLL の読み込み

私の実装に固有の質問がいくつかありました。

  1. コンパイルするスクリプトが複数あり、それらを個別にアンロードしたい場合、それぞれに個別のアプリ ドメインを作成する必要がありますか?
  2. どのアプリ ドメイン名を使用すればよいですか? GUID は良い考えでしょうか? 競合する可能性のある避けるべき名前はありますか?
  3. アセンブリが別のアプリ ドメインにある場合、メイン プログラムのインターフェイスへのアクセスに問題はありますか? 私は現在、ReferencedAssemblies.Add(typeof(Interface).Assembly.Location)コンパイルする前にやっています。
  4. を使用できますかCompilerParameters GenerateInMemory=true、それともどこかに保存する必要がありますか?
4

1 に答える 1

2

順番に答えます:

  1. はい、個別にアンロードする場合は、個別のアプリ ドメインが必要です。
  2. 何でも使う。スクリプトに戻って識別できればデバッグに役立つかもしれませんが、実行中のスレッドにはより当てはまります。
  3. ドメインセットアップのベースパスを自分のものに設定する限りではありません。

    AppDomainSetup.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

  4. いいえ、それを保存する必要はありません。

于 2009-09-22T22:38:52.040 に答える