【发布时间】:2016-01-20 09:12:47
【问题描述】:
IKVM.Reflection.Emit 具有“读取和发出 .NET 1.1、.NET 2.0 和 .NET 4.0 程序集(例如在 .NET 2.0 上运行时)的能力。”。
Mono.Cecil 有相同的吗?对于这个用例,它们是否可以互换?他们现在都支持吗?它们之间的主要区别是什么(在发出 IL 方面)?
【问题讨论】:
标签: .net reflection reflection.emit mono.cecil ikvm
IKVM.Reflection.Emit 具有“读取和发出 .NET 1.1、.NET 2.0 和 .NET 4.0 程序集(例如在 .NET 2.0 上运行时)的能力。”。
Mono.Cecil 有相同的吗?对于这个用例,它们是否可以互换?他们现在都支持吗?它们之间的主要区别是什么(在发出 IL 方面)?
【问题讨论】:
标签: .net reflection reflection.emit mono.cecil ikvm
我知道这是一个老问题,但我想提供一个答案。 IKVM.Reflection.Emit API 是在其作者厌倦了 System.Reflection.Emit 和 Cecil.Reflection.Emit 时发明的。为了让 IKVMC 编译器更快,他从头开始设计这个新的 API。
历史可以从以下博文中找到,
2008 Aug Switch from Microsoft .NET reflection to Cecil
2008 Nov Switch from Cecil to IKVM.Reflection.Emit
2010 Jan Announce IKVM.Reflection
所以一般来说 IKVM.Reflection 和 Cecil 有相似的功能,而且 IKVM.Reflection API 在很多方面应该更快。
到目前为止,您仍然可以看到 Cecil 广泛用于许多实用程序(例如 Obfuscar,我正在维护的一种混淆工具)。 IKVM.Reflection 主要用于 Mono C# 编译器和 IKVM 本身,我不确定是否有其他项目在使用它(但应该很多)。
【讨论】: