一部のデータに対して条件付きステートメントを設計するためのグラフィカルな形式をユーザーに提供したいと考えています。私たちのアプリケーションは、そのグラフィカルな形式を取り、それを C# に変換してコンパイルし、いくつかのデータに対して条件ステートメントを実行して、ブール値を返します。
問題は、ユーザーが新しい条件ステートメントを作成するたびにアプリケーションを再構築する必要がないため、実行時にこれらの条件ステートメントを作成してコンパイルする (そしてもちろん実行する) 必要があることです。
LINQ 式ツリーを使用することも考えましたが、コンパイルされた LINQ 式ツリーは保存できないため、条件ステートメントを実行するたびに再コンパイルする必要があります。
別の方法としては、CodeDOM を使用して条件文を .dll としてコンパイルすることをお勧めします (これらは、条件文に対して実行するデータをパラメーターとして受け取る静的クラスの静的メソッドに変換されます)。これにより、コンパイルされたステートメントを保存でき、実行時に .dll をロードおよびアンロードできます。また、LINQ 式ツリーよりも C# の if ステートメントを生成する方が簡単です。
または、Roslyn を使用して .dll を生成することもできます。これは CodeDOM よりも高速であると報告されていますが、Roslyn はまだ CTP にあります。
知っておくべき隠れた落とし穴、またはこれを行うための一般的なパターンはありますか? データに対してテストする関数のみを生成するように細心の注意を払う (そして、データを変更したり、他の関数の呼び出しを許可したりしない) こと以外に、他に注意すべきことは何ですか? これらの .dll のロードとアンロード (場合によっては数百) によって問題が発生しますか? 各 .dll に独自の名前空間が与えられている場合、(数百の可能性がある) .dll をロードおよびアンロードするとアーティファクトが残りますか?