为了更好地理解编译器的工作方式,我正在尝试编写我自己的玩具我的玩具语言 - > MSIL编译器。我得到了解析和lexing工作,我已经构建了表达式树并使用System.Linq.Expressions表达式树API,我有一个工作的解释器。现在我想发出一些真正的MSIL程序集。将.NET表达式树链接到一个新程序集
问题是,我无法弄清楚如何实际构建这些程序集。 MethodBuilder类只接受原始MSIL方法体,所以我必须得到我的表达式树的原始MSIL。调用Expression.Compile()会返回一个工作委托,但我无法获取其基础MSIL。调用MethodInfo.GetMethodBody()会引发InvalidOperationException,因为它没有在该特定的子类中实现。
如何将该代表链接到新程序集?
请注意,此方法有一些限制,例如无法编译非静态方法。 – 2009-10-24 22:50:50
@ 280Z28:幸运的是,我的玩具语言不是面向对象的,所以不会成为问题。 – 2009-10-24 23:01:18
你能解释一下如何得到相应的'MethodBuilder' - 我意识到这是很久以前的:) – 2010-06-08 23:39:33