C# CCI与Mono.Cecil——优势与劣势

C# CCI与Mono.Cecil——优势与劣势,c#,.net,mono.cecil,cci,C#,.net,Mono.cecil,Cci,我看到过讨论这两个类似框架的文章,但大多数都已经有两年左右的历史了。我认为这两个项目现在都比两年前成熟得多,情况也更复杂 因此,考虑到每一个图书馆的现状,我希望有人能详细解释每一个图书馆的优缺点,以及目前应该优先选择哪一个。Cecil-因为对我来说,社区对它的支持比CCI更好。我总是能更快地在邮件列表/网站上找到cecil的答案。CCI 优点: 可以为您的性能提供更细粒度的控制 最新的版本更成熟一些 缺点: 对象模型更为复杂(如果您不熟悉IL/低级别反射,则会感到困惑,就像我一样) 塞西

我看到过讨论这两个类似框架的文章,但大多数都已经有两年左右的历史了。我认为这两个项目现在都比两年前成熟得多,情况也更复杂


因此,考虑到每一个图书馆的现状,我希望有人能详细解释每一个图书馆的优缺点,以及目前应该优先选择哪一个。

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

CCI

优点:

  • 可以为您的性能提供更细粒度的控制
  • 最新的版本更成熟一些
缺点:

  • 对象模型更为复杂(如果您不熟悉IL/低级别反射,则会感到困惑,就像我一样)
塞西尔(参考)

优点:

  • 具有更简单的对象模型,因此更容易开始使用
缺点:

  • 最新版本不够成熟,因此可用的代码示例较少
  • API正在开发中
  • 您将无法对名称缓存进行太多控制(对于性能)
我会选择哪个

综上所述,我肯定会选择CCI而不是塞西尔。但我不会

Cecil很有前途,有一个简单的API设计,有一个活跃的作者身份(好吧,7.5个月前就有了),并且在我遇到的任何问题上都能毫不费力地进行调试


CCI是相当痛苦的代码反对-基于接口的设计是走得太远。代码很难调试通过。有些事情乍一看似乎是完整的,但不是,或者只处理一个用例。使我头晕目眩(比以前更多)。

不知道为什么会有两个关闭请求。这个问题完全正确。为什么投票支持“不具建设性”?这个问题需要的是事实和项目的现状,而不是“你更喜欢哪一个”。请不要成为SO的删除者;)我对这个问题也很好奇。如果能给出一个比较这两者的详细答案,我将不胜感激,因此我将在这里设置一个悬赏条件。:-)谢谢你的赏金。我们在这里得到了一个非常好的答案,我记不清了,但我也认为CCI对高级代码生成有更好的支持。另外,对Cecil的支持是好的/快速的:)你能为这些评论提供任何直接的证据吗?而且,我对表演很好奇。我怀疑塞西尔在这方面确实做了更多的工作。它似乎也更多地用于开源项目。有什么想法吗?@Noldorin:这是我在7个半月前两次尝试的轶事经历。我在CCI中得到了一个半有效的解决方案,然后把它留给了塞西尔。是的,从那时起,塞西尔可能投入了更多的工作。我记得我最糟糕的问题是:检测所有依赖类型,确定基本类型,以及进行代码生成。我的项目是使用列表而不是数组、可空类型等来反映类型图和代码gen清理过的类型版本。CCI提供了自动(但不完整?)访问者模式遍历。我不认为Cecil有。@Noldorin:我还认为CCI有高级代码生成支持(?),而Cecil没有。因此,一旦创建了基本类型/属性,我就使用T4模板生成代码。很抱歉,如果这些都是错误的信息,我只是自从我完成了那个项目后就没碰过它。需要一些英雄代码才能完成…:)@云鸦:我不知道它能给你多大的控制力。它允许您使用字符串表优化perf,但除此之外,我认为它们与允许您发出的操作码以及允许您发出操作码的位置具有技术上的对等性。CCI为其代码生成支持提供了一个高级包装器,但这并不总是有用的(例如,如果您像我一样,喜欢/可以使用T4模板进行实际的代码生成)。