IKVM.Reflection.Emit 具有“读取和发出 .NET 1.1、.NET 2.0 和 .NET 4.0 程序集的能力(例如,在 .NET 2.0 上运行时)”。
Mono.Cecil 也一样吗?对于这个用例,它们是否可以互换?他们现在都支持吗?它们之间的主要区别是什么(在发出 IL 方面)?
最佳答案
我知道这是一个老问题,但我想提供一个答案。 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本身,不知道有没有其他项目在用(但应该很多)。
关于.net - IKVM.Reflection.Emit 和 Mono.Cecil 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33258188/