为.Net平台生成IL

时间:2011-06-01 05:35:46

标签: c# compiler-construction il

我正在用C#编写一个小编译器,并计划使用System.Reflection.Emit为.Net平台生成IL指令。我的问题是,建议使用System.Reflection.Emit为生产编译器生成IL。

如果不建议使用System.Reflection.Emit为生产编译器生成IL,我们是否有为此目的使用替代库/工具?

4 个答案:

答案 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编写的。

相关问题