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

时间:2014-01-21 22:18:34

标签: c# roslyn mono.cecil nrefactory compiler-as-a-service

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

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

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

1 个答案:

答案 0 :(得分:8)

你有一些误解。

Roslyn是一个私人项目,Mono人将他们的C#编译器转换为服务(Mono.CSharp程序集)。如果您阅读this post by Miguel,您可以了解有关2008年发生的事情的更多信息。

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

Microsoft确实有另一个类似于Cecil的项目,名为stated in README

Cecil是MSIL读写器,而NRefactory主要是C#解析器和AST框架。 NRefactory取决于Cecil为{{3}},以及Mono.CSharp。

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

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