コンパイラがどのように機能するかをよりよく理解するために、自分のおもちゃ My Toy Language -> MSIL コンパイラを作成しようとしています。構文解析と字句解析が機能し、式ツリーを構築し、System.Linq.Expressions 式ツリー API を使用して、機能するインタープリターを取得しました。ここで、実際の MSIL アセンブリを出力したいと思います。
問題は、これらのアセンブリを実際に構築する方法がわからないことです。MethodBuilderクラスは生の MSIL メソッド本体のみを受け入れるため、式ツリーの生の MSIL を取得する必要があります。Expression.Compile()を呼び出すと、作業デリゲートが返されますが、基になる MSIL を取得できません。MethodInfo.GetMethodBody()を呼び出すと、その特定の子クラスに実装されていないため、InvalidOperationException がスローされます。
そのデリゲートを新しいアセンブリにリンクするにはどうすればよいですか?