我有什么选项来生成.net字节码?

时间:2012-03-06 07:20:14

标签: .net compiler-construction code-generation cil

我更喜欢API方法,而不是通过CIL。我可以使用任何高级框架,还是应该使用Reflection.Emit?

更新

在进一步探索中,我注意到有关Mono mcs.exe C#编译器后端使用的内容的(可能)相互矛盾的解释。 Some说“ Mono C#编译器通过使用System.Reflection.Emit API生成ECMA CIL图像”,而elsewhere表示截至2011年9月mcs正在使用IKVM.NET implementation生成字节码。

2 个答案:

答案 0 :(得分:2)

这在很大程度上取决于你想要实现的目标。在不了解您的特定情况的情况下,很难为工作建议正确的工具。

如果您需要在运行时生成动态方法,Reflection.Emit非常适合。如果您要修改程序集,请查看Mono.Cecil。请记住,所有这些工具都需要了解.NET元数据和MSIL。

但是,如果您尝试执行某些操作(例如,检查或修改类型或方法),您可能需要查看像PostSharp这样的AOP解决方案。它可以让你以比MSIL更高的水平表达这些需求。

同样,这一切都取决于你的用例。

免责声明:我在PostSharp的创作者SharpCrafters工作

答案 1 :(得分:0)

字节码不是高级别的。如果要在高级别生成字节码,请使用适当的语言编写,并使用编译器......:)

如果要生成字节码,则按定义为低级别。

你想要实现的目标是什么?也许有可能使用除IL发射之外的其他技术?在不使用IL的情况下,有许多方法可以在.net中操作类运行时。