2014-01-21 20 views
4

我明白微軟的編譯器即服務或Roslyn項目的靈感來自莫諾塞西爾。Mono Cecil和NRefactory之間有什麼關係,以及如何將它們與Roslyn進行比較?

但是Mono Cecil和NRefactory之間的關係是什麼?一個人使用另一個嗎?或者他們是否可以做同樣的事情?

看起來他們都提供了與Roslyn一樣的代碼分析服務。

+1

+1,它應該是一個很好的問題,如果它使用更好的標題。 –

+0

謝謝@LexLi。請隨意編輯標題。 –

回答

7

你有一些誤解。

當單聲道人把他們的C#編譯器轉換爲服務(Mono.CSharp程序集)時,Roslyn是一個私人項目。如果您閱讀this post by Miguel,則可以瞭解更多關於2008年發生的事情的信息。

這兩件事發生在同一微軟PDC事件(首先是Anders's session,然後是Miguel's session)。所以Roslyn與Mono.CSharp有一些關係,但與Cecil沒有任何關係。

微軟確實有另外一個項目,它類似於塞西爾,叫CCI

塞西爾是MSIL讀寫器,而NRefactory主要是C#編譯器和AST框架。 NRefactory依靠Cecil作爲stated in README以及Mono.CSharp。

但是我們應該看到,如果我們做基於Cecil的代碼分析,我們就在MSIL層上,而且這樣的分析實際上適用於所有的.NET語言(包括VB.NET,Oxygene等)。如果代碼分析基於NRefactory,那麼它更側重於C#圖層。

現在應該避免將單聲道比特與Roslyn進行比較,因爲我們不確定Roslyn在微軟定稿和發佈時的樣子。對我來說,Roslyn應該相當於Mono上的一堆庫(包括Cecil,NRefactory,Mono.CSharp和IKVM.Reflection)。

+0

非常感謝你,@LexLi。你給我我正在尋找的答案。在發佈這個問題之前,我實際上研究了一下。除了您提到的CCI元數據之外,還有一個Microsoft CCIAST項目(http://cciast.codeplex.com/)(http://ccimetadata.codeplex.com/)。在決定投入時間學習的哪一個之前,我想簡單地理解差異。非常感謝。你已經爲我清除了一切。 –

相關問題