2010-10-07 75 views
17

This page解釋了四種不同的單聲道編譯器-mcs/gmcs/smcs/dmcs。爲什麼會有四個單聲道C#編譯器?

對我來說,有四個C#編譯器有點奇怪。通常,較新版本的編譯器會保持向後兼容性。

我認爲這是因爲運行時支持問題,但微軟的C#有一個支持所有運行時版本的csc.exe。

回答

18

這是因爲Mono的編譯器是用C#編寫的並且使用System.Reflection,這意味着它只能從運行它的運行庫訪問mscorlib。因此,例如,校董會並不僅僅針對2.1,它實際上使用 2.1 corlib等

已經有計劃了,而有* MCS請使用Mono.Cecil能或Ikvm.Reflection,而不是系統。反射,這意味着可能會有一個單一的mcs編譯器,其中有一些參數用於定位不同的運行時。

微軟的編譯器沒有這個限制,因爲它沒有使用.NET Reflection(它是用本地代碼編寫的)。

+8

看來,重寫使用IKVM.Reflection終於發生了。單聲道2.10不再有這個問題。 – Justin 2011-03-04 06:29:40

13

出於同樣的原因,您仍然可以使用Visual Studio 2005在.NET 2.0中進行開發。當然,您可以使用VS2010並僅使用.NET 2.0代碼啓動.NET 4.0項目,但有些公司害怕升級框架/編譯器版本,如果他們已經有一些工作正常。

僅僅因爲新的編譯器版本向後兼容並不意味着團隊將要升級。

擁有不同的編譯器版本可以確保Mono的所有用戶仍然可以使用他們選擇的任何編譯器版本並且很自在。

  • MCS:編譯器目標1.1運行時(與單聲道2.8被棄用)。
  • gmcs:編譯器以2.0運行時爲目標。
  • smcs:編譯器以2.1運行時爲目標,構建Moonlight應用程序。
  • dmcs:從Mono 2.6開始,此命令是C#4.0編譯器,並引用了4.0運行時。

就個人而言,我喜歡升級時,我可以,但有些公司和團隊都不能出於某種原因或其他這樣做。

+6

最新版本被稱爲mcs。它是通用的,可以編譯任何目標框架。 – 2015-03-18 03:51:00

相關問題