IKVM.Reflection.Emit和Mono.Cecil之间的区别

Vla*_*lad 11 .net reflection ikvm reflection.emit mono.cecil

IKVM.Reflection.Emit具有"读取和发出.NET 1.1,.NET 2.0和.NET 4.0程序集(在运行时,例如,.NET 2.0)"的能力."

Mono.Cecil有相同的吗?这个用例是否可以互换?它们现在都得到支持吗?它们之间的主要区别是什么(发射IL)?

Lex*_* Li 4

我知道这是一个老问题,但我想提供一个答案。IKVM.Reflection.EmitAPI 是在其作者厌倦了System.Reflection.Emit和时发明的Cecil.Reflection.Emit。为了让IKVMC编译器更快,他从头开始设计这个新的API。

历史可以从以下博客文章中找到,

2008 年 8 月 从 Microsoft .NET 反射切换到 Cecil

2008 年 11 月 从 Cecil 切换到 IKVM.Reflection.Emit

2010年1月宣布IKVM.Reflection

所以一般来说 IKVM.Reflection 和 Cecil 具有类似的功能,并且 IKVM.Reflection API 在很多方面应该更快。

到目前为止,您仍然可以看到 Cecil 广泛应用于许多实用程序中(例如 Obfuscar,我正在维护的混淆工具)。IKVM.Reflection 主要用于 Mono C# 编译器和 IKVM 本身,我不确定是否有其他项目使用它(但应该很多)。