【问题标题】:CCI vs. Mono.Cecil -- advantages and disadvantagesCCI vs. Mono.Cecil——优缺点
【发布时间】:2011-10-07 08:22:34
【问题描述】:

我看过讨论这两个类似框架的文章,但大多数都是两年左右的时间。我认为这两个项目现在都比两年前成熟得多,而且情况也更加复杂。

因此,鉴于每个库的当前状态,我希望有人可以详细解释每个库的优缺点,目前应该首选哪个。

【问题讨论】:

  • 不确定为什么会有 2 个关闭请求。这个问题完全有效。
  • 为什么投票支持“非建设性”?该问题确实询问了项目的事实和当前状态,而不是“您更喜欢哪个”。请不要删除 SO ;)
  • 我也很好奇这个问题。非常感谢比较两者的详细答案,因此我将在这里设置赏金。 :-)
  • 感谢您设置赏金。我们在这里得到了一个很好的答案

标签: c# .net mono.cecil cci


【解决方案1】:

CCI

优点:

  • 可以让您更精细地控制性能
  • 最新版本成熟了一些

缺点:

  • 对象模型更复杂(如果您像我一样不熟悉 IL/低级反射,则可能会感到困惑)

Cecil(指the newer git-hub version

优点:

  • 具有更简单的对象模型,因此更容易上手

缺点:

  • 最新版本不太成熟,因此可用的代码示例较少
  • API 正在进行中
  • 您将无法控制名称缓存(用于性能)

我会选择哪个

计算利弊,看起来我肯定会选择 CCI 而不是 Cecil。但我不会。

Cecil 崭露头角,拥有简单的 API 设计,拥有活跃的作者身份(嗯,7.5 个月前,and still seems to now),并且在我遇到的任何问题上都能轻松调试。

对 CCI 进行编码非常痛苦 - 基于界面的设计太过分了。代码很难调试。有些事情乍一看似乎是完整的,但实际上并不完整,或者只处理一个用例。 The NameTable stuff 让我头晕目眩(比现在还多)。

【讨论】:

  • 我不太记得了,但我也认为 CCI 对高级代码生成有更好的支持。此外,对 Cecil 的支持很好/很快 :)
  • 您能否为其中一些 cmets 提供任何直接证据?另外,我对性能很好奇。我怀疑塞西尔确实有更多的工作要做。它似乎也更多地用于开源项目。有什么想法吗?
  • @Noldorin:这是我在 7 个半月前尝试的轶事经验。我在 CCI 中得到了一个半工作的解决方案,并为 Cecil 放弃了它。是的,从那时起,Cecil 可能还有很多工作要做。我记得我最糟糕的问题是:检测 所有 依赖类型、确定基本类型以及进行代码生成。我的项目是使用列表而不是数组、可为空类型等来反映类型图和代码生成清理版本的类型。CCI 提供了自动(但不完整?)访问者模式遍历。我认为塞西尔没有。
  • @Noldorin:我还认为 CCI 有高级代码生成支持(?),而 Cecil 没有。因此,一旦创建了基本类型/属性,我就使用 T4 模板来生成代码。很抱歉,如果其中任何一个最终成为错误信息,自从我完成那个项目后我就没有碰过它。完成了一些英雄编码...... :)
  • @cloudraven:我不知道它真的给了你多少控制权。它使您可以使用字符串表优化性能,但除此之外,我认为它们与它们允许您发出的操作码以及它们允许您发出它们的位置具有技术上的一致性。 CCI 为其代码生成支持提供了一个高级包装器,但这并不总是有用的(例如,如果您像我一样喜欢/可以使用 T4 模板来进行实际的代码生成)。
【解决方案2】:

Cecil - 因为对我来说,社区对它的支持比 CCI 更好。对于 cecil,我总是能更快地在邮件列表/网站上找到答案。

【讨论】:

    猜你喜欢
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2015-12-09
    • 1970-01-01
    • 2011-01-02
    • 2010-12-05
    相关资源
    最近更新 更多