【发布时间】:2009-10-24 18:24:03
【问题描述】:
我正在尝试编写自己的玩具 My Toy Language -> MSIL 编译器,以便更好地了解编译器的工作原理。我得到了解析和词法分析工作,我已经构建了表达式树并使用 System.Linq.Expressions 表达式树 API,我有一个工作解释器。现在我想发出一些真正的 MSIL 程序集。
问题是,我不知道如何实际构建这些程序集。 MethodBuilder 类只接受原始 MSIL 方法体,因此我必须获取表达式树的原始 MSIL。调用 Expression.Compile() 返回一个工作委托,但我无法获得其底层 MSIL。调用 MethodInfo.GetMethodBody() 会引发 InvalidOperationException,因为它没有在该特定子类中实现。
如何将该委托链接到新程序集?
【问题讨论】:
标签: .net expression-trees cil reflection.emit