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