.net - Mono Cecil vs. PostSharp Core vs. Microsoft CCI 实现 AOP 框架

标签 .net aop postsharp mono.cecil cci

在实现自定义 AOP 框架的功能、易用性、文档、示例、社区/支持、VS 集成、已知实现、长期可行性和构建速度方面,哪个更好?

我将从我所知道的开始(到目前为止我只尝试过 PostSharp):

  • 微软通用编译器 Instrastruture (CCI):我读过 用于 FxCop、ILMerge、Spec# 和 代码契约(Contract)。看起来级别很低as it does not even take care of correcting offsets for branch codes that are borken when IL is modified with it .
  • PostSharp已有 5 年历史,拥有许多 AOP 的功能(例如摘要 有些事情你需要做 手动执行 IL 操作),来源 代码可用、开发/支持 只有一个人,但他正在计划 使这成为一项业务, 文档但可以更好, 构建时间大约是原来的两倍,非常 关于如何注入(inject) IL 的小样本 并且2.0版本即将发布 这有望得到很大改善。
  • Mono Cecil:由一个人撰写,部分 Mono 套件的并且有一个 Reflector 插件 Reflexil 使用 Mono Cecil。

最佳答案

Microsoft.CCI 和 Mono.Cecil 都是低级的,并且不验证生成的程序集。如果生成的代码或汇编结构有任何错误,则需要花费大量时间来查找问题原因。 如果 PostSharp 的功能足以满足您的任务,我建议您使用它。
否则... Mono.Cecil 有更好、更容易理解和易于使用的对象模型。但是,在我的程序中使用它时,我遇到了一个丑陋的错误(对错误方法的引用保存在程序集中;我认为元数据标记处理存在一些错误)
Microsoft.CCI 有一个丑陋的、完全过度设计的对象模型,同时缺乏许多简单的功能;然而,它比 Mono.Cecil 更成熟。最后,我放弃了 Mono.Cecil,并在我的程序中使用了 Microsoft.CCI。

关于.net - Mono Cecil vs. PostSharp Core vs. Microsoft CCI 实现 AOP 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1382922/

相关文章:

c# - 预处理 C# - 检测方法

C# 可以将对象附加到方法调用而不将其作为参数吗?

.net - 是否可以在 Windows 7 上安装 Web 部署处理程序 (WMSVC)?

c# - 将字符串拆分为数组并对数组进行排序

c# - linq 查询的返回数据类型

java - Aspectj 与 android 库

java - 针对某些操作创建用户事件。推荐的解决方案是什么?

c# - Lazy<> 和 Task<> 可以组合起来推迟数据库查找吗?

spring - 类型/通用方面是否值得付出努力?

serialization - SignalR 和序列化对象数组