为.Net平台生成IL

5
我正在使用C#编写一个小型编译器,计划使用System.Reflection.Emit为.Net平台生成IL指令。我的问题是,是否建议在生产编译器中使用System.Reflection.Emit来生成IL。
如果不建议在生产编译器中使用System.Reflection.Emit来生成IL,那么我们是否有其他可用的库/工具来实现这个目的?
4个回答

8

System.Reflection.Emit 适用于生产编译器,不过你可能需要看看 mono-cecil


1
+1. Microsoft.CCI也是一个选择。该库似乎非常注重性能(显式名称表就是一个例子),因此它可能允许您创建更快的编译器。但在我有限的使用中,我更喜欢Cecil的API。 - Merlyn Morgan-Graham

2

以下是一篇博客文章,描述了一些与Reflection.Emit相关的问题,这些问题可能对您的项目并不是严重限制,但您可以自行判断:

如果这些问题不影响您,那么您可以使用这个SO问题中的提示来生成Reflection.Emit和将程序集写入磁盘:


2

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


1

Reflection.Emit 通常是可以的,但是如果你要生成的程序集不是为同一平台(例如,你想从编译器构建 Silverlight DLL,而编译器是使用“完整”的 .NET 编写的),那么 IKVM.Reflection.Emit(可在 Mono 中获得)可能会有更多选项。


1
Mono 在各个方面都非常棒。他们构建了许多酷炫的东西,每个 .NET 开发人员都应该知道。我之前不知道 IKVM - John Leidegren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接