ユーザーにオンザフライの拡張性を提供する必要があるアプリケーションがあります。大量のデータといくつかの数学/数値アルゴリズムを備えた一種の計算エンジンと考えることができます。double を返す有効な C# 式をユーザーが作成できるように、いくつかの静的フィールド (データ) とメソッド (計算) を提供します。
ユーザーは有効な式をテキスト ボックスに入力し、結果を提供する必要があります。私が現在行っていることは、http://blogs.msdn.com/b/abhinaba/archive/2006/02/09/528416の手順に従って、メモリ内で生成されるアセンブリの静的メソッドに式を挿入することです。 .aspx . 次に、リフレクションを使用して特定のメソッドを呼び出し、結果を返します。
生成されたアセンブリがアプリケーションのライフサイクル全体にわたって蓄積し続けるという事実を除いて、これは正常に機能します。クライアント アプリケーションしか持っていなかったときはこれで問題ありませんでしたが、現在はサーバー ベースのアプリケーションに移行しており、時々サービスをリセットする必要はありません。
アセンブリをアンロードする方法を検索すると、System.Addin 名前空間が見つかりました。それはまさに私が望むことを行います.別のAppDomainにアセンブリをロードします.これは後で破棄できます. さらに、すべての反射をカプセル化します。
私が今抱えている唯一の問題は、AddInStore がファイル パスを想定していることですが、CompileParameters の GenerateInMemory プロパティを true に設定することにより、すべてのアセンブリがメモリ内に生成されます。アセンブリをディスクに書き込むことは絶対に必要ですか? または、実行時にコンパイルされたアセンブリをアドインとして直接使用することは可能ですか?
よろしく、 カルロス