Mono Cecil和NRefactory之间的关系是什么?如何将它们与Roslyn进行比较?

Wat*_* v2 4 c# mono.cecil compiler-as-a-service roslyn nrefactory

据我所知,微软的Compiler as a Service或Roslyn项目的灵感来自Mono Cecil.

但是Mono Cecil和NRefactory之间的关系是什么?一个人用另一个吗?或者他们是做同样事情的替代技术?

看起来它们都提供了相同的代码分析服务,就像Roslyn一样.

Lex*_* Li 8

你有一些误解.

当Mono家伙将他们的C#编译器转换为服务(Mono.CSharp程序集)时,Roslyn是一个私人项目.如果您阅读Miguel的这篇文章,您可以了解更多关于2008年发生的事情.

这两个碰巧是在同一个微软PDC事件上一起宣布的(首先是Anders的会议,然后是Miguel的会议).因此Roslyn与Mono.CSharp有一些关系,但与Cecil没有任何关系.

微软确实有另一个类似于Cecil的项目,名为CCI

Cecil是一个MSIL读写器,而NRefactory主要是C#解析器和AST框架.NRefactory依赖于自述文件中的 Cecil ,以及Mono.CSharp.

但我们应该看到,如果我们基于Cecil进行代码分析,我们就在MSIL层,这种分析实际上适用于所有.NET语言(包括VB.NET,Oxygene等).如果代码分析基于NRefactory,那么它更侧重于C#层.

此时应该避免将Mono位与Roslyn进行比较,因为我们不确定Roslyn在最终确定并由Microsoft发布时的样子.对我来说,Roslyn应该相当于Mono上的一堆库(包括Cecil,NRefactory,Mono.CSharp和IKVM.Reflection).