.net - IKVM.Reflection.Emit 和 Mono.Cecil 的区别

标签 .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 方面)?

最佳答案

我知道这是一个老问题,但我想提供一个答案。 IKVM.Reflection.Emit API 是在作者厌倦时发明的 System.Reflection.EmitCecil.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/

相关文章:

c# - 与 Entity Framework 和 MVC 的多对多关系与排序

c# - 多线程 c# 应用程序 System.OutOfMemoryException 在运行 1~5 分钟后

java - 比较方法参数类型,过滤具有特定签名的类的方法

c# - 使用 CustomAttributeBuilder 的参数不匹配(装箱十进制?)

c# - Infragisitcs ultrawingrid 列选择器和列过滤器

java - 使用 java 中的反射在 Play 中动态加载 View 类

c++ - 使用 Boost Reflect 或其他 C++ 反射库包装 C++ 函数

c# - 动态类型影子基类的属性并使用 Reflection.Emit 设置为 protected

使用 Telerik ASP MVC 的动态模型

.net - 结合依赖注入(inject)和动态切面编织