我了解 Microsoft 的 Compiler as a Service 或 Roslyn 项目的灵感来自 Mono Cecil。
但是 Mono Cecil 和 NRefactory 是什么关系呢?一个使用另一个吗?还是它们是做同样事情的替代技术?
似乎它们都提供了相同的大量代码分析服务,就像 Roslyn 一样。
我了解 Microsoft 的 Compiler as a Service 或 Roslyn 项目的灵感来自 Mono Cecil。
但是 Mono Cecil 和 NRefactory 是什么关系呢?一个使用另一个吗?还是它们是做同样事情的替代技术?
似乎它们都提供了相同的大量代码分析服务,就像 Roslyn 一样。
你误会了
Roslyn 是一个私人项目,当时 Mono 的人正在将他们的 C# 编译器转换为服务(Mono.CSharp 程序集)。如果您阅读Miguel 的这篇文章,您可以了解更多关于 2008 年发生的事情。
两者碰巧在同一个 Microsoft PDC 活动上一起宣布(首先是Anders 的会议,然后是 Miguel 的会议)。所以 Roslyn 与 Mono.CSharp 有一些关系,但与 Cecil 没有关系。
微软确实有另一个类似于 Cecil 的项目,叫做CCI
Cecil 是 MSIL 读写器,而 NRefactory 主要是 C# 解析器和 AST 框架。NRefactory 依赖于 README中所述的 Cecil以及 Mono.CSharp。
但是我们应该看到,如果我们基于 Cecil 做代码分析,我们是在 MSIL 层,这种分析实际上适用于所有 .NET 语言(包括 VB.NET、Oxygene 等)。如果代码分析基于 NRefactory,那么它更侧重于 C# 层。
此时应避免将 Mono 位与 Roslyn 进行比较,因为我们不确定 Roslyn 在 Microsoft 最终确定和发布时的样子。对我来说,Roslyn 应该相当于 Mono 上的一堆库(包括 Cecil、NRefactory、Mono.CSharp 和 IKVM.Reflection)。