我正在使用C#编写一个小型编译器,计划使用System.Reflection.Emit为.Net平台生成IL指令。我的问题是,是否建议在生产编译器中使用System.Reflection.Emit来生成IL。
如果不建议在生产编译器中使用System.Reflection.Emit来生成IL,那么我们是否有其他可用的库/工具来实现这个目的?
如果不建议在生产编译器中使用System.Reflection.Emit来生成IL,那么我们是否有其他可用的库/工具来实现这个目的?
System.Reflection.Emit
适用于生产编译器,不过你可能需要看看 mono-cecil。
以下是一篇博客文章,描述了一些与Reflection.Emit
相关的问题,这些问题可能对您的项目并不是严重限制,但您可以自行判断:
如果这些问题不影响您,那么您可以使用这个SO问题中的提示来生成Reflection.Emit
和将程序集写入磁盘:
虽然 System.Reflection.Emit
让你可以进行代码生成,但它是 .NET 框架中最古老的代码生成 API,需要理解 IL。.NET 3.5 中引入的表达式树在 .NET 4.0 中得到扩展(无法创建新类型),但它们可以用于组装完整的方法体。
Reflection.Emit
通常是可以的,但是如果你要生成的程序集不是为同一平台(例如,你想从编译器构建 Silverlight DLL,而编译器是使用“完整”的 .NET 编写的),那么 IKVM.Reflection.Emit
(可在 Mono 中获得)可能会有更多选项。
IKVM
。 - John Leidegren