2009-03-05 8 views
4

私は以下のことを行うプログラムを実行していることを考慮してください。 実行中の新しいコードにアクセスできるように、テキストファイルからコードを読み込み、すでに実行されているコードのすべてのコンポーネント。 これはどのように可能ですか?助けてください。同じアセンブリ空間内で動的にモジュールを生成する

+0

"自分のアセンブリスペース"、 "すべてのコンポーネント"& "既に実行中のコード"とはどういう意味ですか? – abhilash

答えて

0

魔法の仕組みはよくわかりませんが、私はMyGenerationを見ています。これはオープンソースであり、あなたがしたいことを達成するものです。 C#、VB.Net、JScriptのファイルを読み込み、それらのスクリプトをビルド/コンパイルして、独自のクラスやアセンブリのセットにアクセスできるようにします。

2

アセンブリスペースでは、AppDomainを意味しますか?

IronPythonをご覧ください。スクリプティング言語として、実行時にプログラムに動的に追加する方が適しています。それ以外の場合は

あなたはSystem.dllの中で座ってMicrosoft.CSharp.CSharpCodeProvider経由のC#(およびVB.NET)コンパイラへのアクセス権を持っています。

このテキストファイルを使用して、別のdll(おそらくインメモリ)にコンパイルできます。コンパイル中に、現在実行中のアセンブリを参照として追加するようにしてください。次に、現在実行中のAppDomainにアセンブリをロードします。

  • これにより、アプリケーション内のすべてのオブジェクトにアクセスできます。ただし、は、コードを再度アンロードできません。 AppDomain(つまり、アプリケーション)全体をアンロードする必要があります。
  • アセンブリを個別のAppDomainにロードする必要があります。 Remoting(またはその他のプロセス通信方法)を介してオブジェクトの一部に明示的にアクセスする必要がありますが、テキストファイルが変更された場合にはコードをアンロード/置換できます。

いずれにしても、リフレクションを使用して動的に読み込まれたコードを呼び出す必要があります。

関連する問題