生成.net字节码有哪些选项?

生成.net字节码有哪些选项?,.net,compiler-construction,code-generation,cil,.net,Compiler Construction,Code Generation,Cil,我更喜欢API方法,而不是通过CIL。有没有什么高级框架可以使用,或者应该使用Reflection.Emit 更新 在进一步研究中,我注意到,对于Mono mcs.exe C#编译器的后端使用了什么(可能)有相互矛盾的解释。假设“Mono C#编译器通过使用System.Reflection.Emit API生成ECMA CIL图像”,同时声明截至2011年9月,mcs使用IKVM.NET生成字节码。字节码不是高级的。如果您想在高级生成字节码,请使用适当的语言编写,并使用编译器……:) 如果您想

我更喜欢API方法,而不是通过CIL。有没有什么高级框架可以使用,或者应该使用Reflection.Emit

更新


在进一步研究中,我注意到,对于Mono mcs.exe C#编译器的后端使用了什么(可能)有相互矛盾的解释。假设“Mono C#编译器通过使用System.Reflection.Emit API生成ECMA CIL图像”,同时声明截至2011年9月,mcs使用IKVM.NET生成字节码。

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

如果您想生成字节码,它是按定义的低级


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

这在很大程度上取决于您试图实现的目标。如果不知道你的具体情况,就很难为这项工作推荐合适的工具

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

然而,如果您试图做一些需要检查或修改类型或方法的事情,那么您可能希望看到类似这样的AOP解决方案。它将让您在比MSIL更高的级别上表达这些需求

同样,这在很大程度上取决于您的用例


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

C#是生成CIL的一个相当“高级框架”:)太模糊了。也许是因为缺少细节而道歉——在一次颠簸的公交车旅行中,我很快在手机上写下了这封信。我的意思是编译器标签,表明我需要将这个框架用作编译器的代码生成后端。我正在考虑为编译器创建后端代码生成。我当然可以生成文本IL,但我更希望能够直接流到字节码,而不需要额外的过程来转换IL。所以,像postsharp这样的IL重写器或基于C#的框架(它强加了特定形式的语义)可能不适合我的需要。有一些具有略高抽象级别的帮助器API来帮助发出IL/字节代码。我记得几年前在代码项目中提到过一个,但我记不起它的名字了。它可能在几年前就被废弃了。