我更喜欢API方法,而不是通过CIL。我可以使用任何高级框架,还是应该使用Reflection.Emit?
更新
在进一步探索中,我注意到有关Mono mcs.exe C#编译器后端使用的内容的(可能)相互矛盾的解释。 Some说“ Mono C#编译器通过使用System.Reflection.Emit API生成ECMA CIL图像”,而elsewhere表示截至2011年9月mcs正在使用IKVM.NET implementation生成字节码。
答案 0 :(得分:2)
这在很大程度上取决于你想要实现的目标。在不了解您的特定情况的情况下,很难为工作建议正确的工具。
如果您需要在运行时生成动态方法,Reflection.Emit
非常适合。如果您要修改程序集,请查看Mono.Cecil。请记住,所有这些工具都需要了解.NET元数据和MSIL。
但是,如果您尝试执行某些操作(例如,检查或修改类型或方法),您可能需要查看像PostSharp这样的AOP解决方案。它可以让你以比MSIL更高的水平表达这些需求。
同样,这一切都取决于你的用例。
免责声明:我在PostSharp的创作者SharpCrafters工作
答案 1 :(得分:0)
字节码不是高级别的。如果要在高级别生成字节码,请使用适当的语言编写,并使用编译器......:)
如果要生成字节码,则按定义为低级别。
你想要实现的目标是什么?也许有可能使用除IL发射之外的其他技术?在不使用IL的情况下,有许多方法可以在.net中操作类运行时。