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