爲了更好地理解編譯器的工作方式,我正在嘗試編寫我自己的玩具我的玩具語言 - > 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