System.Reflection.Emit をしばらく使用していますが、バグが発生しやすいのと同じくらい苦痛です (そうでない人はいませんか?)。
SRE を直接操作するよりも安全で簡単な方法で IL を生成するために信頼できる、IL ジェネレーターの優れたラッパーがあるかどうか知っていますか?
編集:
式ツリーを操作することは、IL を直接出力するよりも断然簡単で安全であることはわかっていますが、現時点ではいくつかの制約もあります。コード ブロックを作成したり、ループを使用したり、複数のローカル変数を宣言して操作したりすることができません。.NET 4 がリリースされるまで待つ必要があります :)
さらに、既に SRE に依存しているコード ベースを扱っています。
明らかに、ILGenerator は私が必要とするすべてを行います。しかし、それを操作するときは、もっと助けていただければ幸いです。かなり低いレベルのままである ILGenerator ラッパーについて言及しているとき、次のようなメソッドを提供できるものについて考えます。
// Performs a virtual or direct call on the method, depending if it is a
// virtual or a static one.
Call(MethodInfo methodInfo)
// Pushes the default value of the type on the stack, then emit
// the Ret opcode.
ReturnDefault(Type type)
// Test the object type to emit the corresponding push
// opcode (Ldstr, Ldc_I*, Ldc_R*, etc.)
LoadConstant(object o)
これは実際には 3 つの素朴な例ですが、私の予想を示すには十分かもしれません。これは一連の拡張メソッドとして見ることができますが、RunSharpのように条件付きステートメントとループをサポートすると便利です。実際、RunSharp は私が望むものにかなり近いですが、ILGenerator を抽象化しすぎて、そのすべての機能を公開していません。
どこかは思い出せませんが、オープンソース プロジェクトでそのようなヘルパーを見たことがあります。