我正在用C#编写一个小编译器,并计划使用System.Reflection.Emit
为.Net平台生成IL指令。我的问题是,建议使用System.Reflection.Emit
为生产编译器生成IL。
如果不建议使用System.Reflection.Emit
为生产编译器生成IL,我们是否有为此目的使用替代库/工具?
答案 0 :(得分:7)
System.Reflection.Emit
适用于生产编译器,但您可能需要查看mono-cecil。
答案 1 :(得分:2)
这是一篇博客文章,描述了Reflection.Emit
的一些问题,这些问题可能不是您项目的严重限制,但您可以做出判断:
如果这些问题不打扰您,那么您可以使用此SO问题获取有关使用Reflection.Emit
生成并将程序集写入磁盘的提示:
答案 2 :(得分:2)
虽然System.Reflection.Emit
让你做代码生成,但它是.NET框架中最古老的代码生成API,需要了解IL。表达式树在.NET 3.5中引入并在.NET 4.0中扩展(不能创建新类型),但它们可用于组装完整的方法体。
答案 3 :(得分:1)
Reflection.Emit
通常正常,但如果您生成的程序集不适用于同一平台,则IKVM.Reflection.Emit
(可从Mono获得)可能有更多选项(即您想要从你的编译器构建一个silverlight dll,它是用“完整的”.NET编写的。