This page解釋了四種不同的單聲道編譯器-mcs/gmcs/smcs/dmcs。爲什麼會有四個單聲道C#編譯器?
對我來說,有四個C#編譯器有點奇怪。通常,較新版本的編譯器會保持向後兼容性。
我認爲這是因爲運行時支持問題,但微軟的C#有一個支持所有運行時版本的csc.exe。
This page解釋了四種不同的單聲道編譯器-mcs/gmcs/smcs/dmcs。爲什麼會有四個單聲道C#編譯器?
對我來說,有四個C#編譯器有點奇怪。通常,較新版本的編譯器會保持向後兼容性。
我認爲這是因爲運行時支持問題,但微軟的C#有一個支持所有運行時版本的csc.exe。
這是因爲Mono的編譯器是用C#編寫的並且使用System.Reflection,這意味着它只能從運行它的運行庫訪問mscorlib。因此,例如,校董會並不僅僅針對2.1,它實際上使用 2.1 corlib等
已經有計劃了,而有* MCS請使用Mono.Cecil能或Ikvm.Reflection,而不是系統。反射,這意味着可能會有一個單一的mcs編譯器,其中有一些參數用於定位不同的運行時。
微軟的編譯器沒有這個限制,因爲它沒有使用.NET Reflection(它是用本地代碼編寫的)。
出於同樣的原因,您仍然可以使用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運行時。
就個人而言,我喜歡升級時,我可以,但有些公司和團隊都不能出於某種原因或其他這樣做。
最新版本被稱爲mcs。它是通用的,可以編譯任何目標框架。 – 2015-03-18 03:51:00
看來,重寫使用IKVM.Reflection終於發生了。單聲道2.10不再有這個問題。 – Justin 2011-03-04 06:29:40