5

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

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

4

4 回答 4

7

System.Reflection.Emit对于生产编译器来说很好,尽管您可能想看看mono-cecil

于 2011-06-01T05:38:37.247 回答
2

这是一篇博客文章,描述了一些Reflection.Emit可能对您的项目没有严重限制的问题,但您可以作为评委:

如果这些问题不困扰您,那么您可以使用这个 SO question 来获取有关生成使用Reflection.Emit和将程序集写入磁盘的提示:

于 2011-06-01T05:46:32.707 回答
2

虽然System.Reflection.Emit让我们进行代码生成,但它是 .NET 框架中最古老的代码生成 API,它需要了解 IL。.NET 3.5 中引入并在 .NET 4.0 中扩展的表达式树(不能创建新类型),但它们可用于组装完整的方法体。

于 2011-06-01T05:52:58.663 回答
1

Reflection.Emit通常问题,但是 IKVM.Reflection.Emit(可从 Mono 获得)如果您生成的程序集不是针对同一平台(即您想从您的编译器构建一个 Silverlight dll,它是用“完整”.NET 编写的),则可能有更多选项。

于 2011-06-01T06:06:33.050 回答