.net、mono和C#

來源:互聯網
上載者:User

標籤:mil   wpf   pil   版本   發布   mic   -o   分享   inux   

.net  framework

wiki:en  chs

 

版本 通用語言執行平台(CLR) 發布時間 隨同分發的Visual Studio 預裝於windows系統 支援的windows系統
1.0 1.0 2002.2.23 Visual Studio .NET WinXP WinXP
1.1 1.1 2003年4月24日 Visual Studio .NET 2003   WinXP、Vista
2.0 2.0 2005年11月7日 Visual Studio 2005  

WinXP、Vista、Win7、

Win8、Win8.1、Win10

3.0 2.0 2006年11月6日 Microsoft Blend for Visual Studio Vista
3.5 2.0 2007年11月19日 Visual Studio 2008 Win7
4.0 4 2010年4月12日 Visual Studio 2010  

WinXP SP3、Vista SP1、Win7、

Win8、Win8.1、Win10

4.5 4 2012年8月15日 Visual Studio 2012 Win8

Vista SP2、Win7 SP1、

Win8、Win8.1、Win10

4.5.1 4 2013年10月17日 Visual Studio 2013 Win8.1
4.5.2 4 2014年5月5日    
4.6 4 2015年7月20日 Visual Studio 2015 Win10
4.6.1 4 2015年11月30日 Visual Studio 2015 Update 1 Win10 v1511
4.6.2 4 2016年8月2日   Win10 v1607
4.7 4 2017年4月5日 Visual Studio 2017 Win10 v1703

注1:同一版本的CLR(Common Language Runtime)的.net framework是向上相容的

注2:支援WinForm的..net framework最低版本為2.0,支援WPF的.net framework最低版本為3.0

注3:.net core(chs)是微軟重新開發的開源跨平台.net實現,是未來的所有.net平台的基礎。

          在.net core推出之後,.net framework與mono將基於.net core重新構建。.net framework將成為其在windows上的一個發行版,mono將成為.net core的一個跨平台發行版。

          .net core提供corefx類庫,C#及Visual Basic編輯器,並實現了2種運行時:

           ① NativeRuntime -- 將.net代碼直接轉換為本地機器碼

           ② CoreCLR -- 開源的JIT(Just-in-Time compilation,即時編譯)運行時,來動態地將符合CLS(Common Language Specification,Common Language Specification)

               的CIL(Common Intermediate Language,通用中繼語言)或叫MSIL即時轉換為本地機器碼

               CIL可以在任何支援CLI(Common Language Infrastructure,通用語言基礎結構)的環境中運行

              並提供了BCL(Base Classlibrary,基礎類庫)包含如FileSystem、Console、XML操作等

         

注4:.net compact framework(wiki:en  chs)為精簡版的.net framework,主要用於移動或嵌入式windows平台開發

 

mono

wiki:en   chs

github:prj  docs

mono是.net framework的一個開源的、跨平台的實現。由mono運行時、mono編譯器、 .NET Frame Class Libray及Mono Class Libray組成。

(1)mono運行時(CLR )實現了ECMA 通用語言基礎結構(CLI)標準,提供了即時(JIT)編譯器,靜態編譯器(AOT,Ahead Of Time),庫載入器,記憶體回收機器,線程操作,互通性

(2)許多語言(如:C#、VB.NET、Java、JavaScript、Python、Lua等)實現了產生為CIL的編譯器,使得這些語言可以在mono上運行,其C#編譯器提供C#所有版本的完整功能

(3).NET Frame Class Libray是Mono平台提供了一組全面的相容微軟的.Net framework類庫

(4)Mono Class Libray是Mono自己的類庫,其提供的功能是有用的,特別是在構建Linux應用程式。如:Gtk +、Zip、LDAP、OpenGL、Cairo、POSIX等相關的類。

注1:Mono會將程式一部分代碼通過AOT(AOT實際也是調用JIT來提前靜態編譯得到本地機器碼),以降低在程式運行時JIT動態編譯在效率上的問題。

注2:在iOS平台是禁止JIT的,所有mono只能以Full AOT(完全靜態編譯)模式啟動並執行(即:將程式集所有CIL代碼進行AOT編譯產生本地機器碼)

         ExecutionEngineException: Attempting to JIT compile method ‘...‘ while running with --aot-only.

         目前由於技術或實現上的原因在使用Full AOT寫代碼時有一些限制:

        ① 不支援泛型虛方法,因為對於泛型代碼,Mono通過靜態分析以確定要執行個體化的類型並產生代碼,但靜態分析無法確定運行時實際調用的方法(C++也因此不支援虛模版函數)

        ② 不支援對泛型類的P/Invoke

        ③ 不能使用反射中的Property.SetInfo給非空類型賦值

        ④ 實值型別作為Dictionary的Key時會有問題,實際上實現了IEquatable<T>的類型都會有此問題,因為Dictionary的預設建構函式會使用EqualityComparer<TKey>.Default作為比較子,

             而對於實現了IEquatable<T>的類型,EqualityComparer<TKey>.Default要通過反射來執行個體化一個實現了IEqualityComparer<TKey>的類(可以參考EqualityComparer<T>的實現)。

             解決方案是自己實現一個IEqualityComparer<TKey>,然後使用Dictionary<TKey, TValue>(IEqualityComparer<TKey>)構造器建立Dictionary執行個體。

        ⑤ 由於不允許動態產生代碼,不允許使用System.Reflection.Emit,不允許動態建立類型。註:不要混淆了Reflection.Emit和反射,所有反射的API均可用

        ⑥ 由於不允許使用System.Reflection.Emit,無法使用DLR(Dynamic Language Runtime,動態語言運行時)及基於DLR的任何語言。

unity使用的mono在github專門拉了份代碼,下面是之間版本的說明:

Unity版本 mono運行時版本 clr版本 對應.net版本 對應C#版本 說明
3.x、4.x、5.x 2.0 2.0 3.5 4.0 完全支援C#3.0,但也支援某些C#4.0特性(註:clr2.0支援下的特性)

5.3.5p8的測試版

5.5及以上版本

2.0 2.0 3.5 4.0

① 升級為mono4.4版本中的C#編譯器,就編譯器而言能支援C#6.0

② 運行時還是2.0,受其限制,實際對C#的支援情況與3.x、4.x、5.x版本一致

③ 5.3.5p8正式版本並沒有升級C#編譯器,而是單獨給出一個5.3.5p8的測試版,在這個特殊版本中含有升級的C#編譯器

④ 5.5及以上版本開始使用升級C#編譯器

2017.1

2017.2

2.0

5.0.1

2.0

4.0

3.5

4.6

4.0

6.0

① 預設使用先前版本的運行時與C#編譯器版本

② 菜單:Edit --> Project Settings --> Player  Other Settings設定塊Configuration節中,

修改"Scripting Runtime Version" 中的 Stable(.NET 3.5 Equivavalent) 為 Experimental(.NET 4.6 Equivavalent) 

 

C#

wiki:en  chs

版本 語言規格 .NET版本 Visual Studio版本
ECMA ISO/IEC Microsoft
C#1.0 2002年12月 2003年4月 2002年1月 1.0 2002
C#1.1、1.2 2003年10月 1.1 2003
C#2.0  2006年6月  2006年9月 2005年9月 2.0 2005
C#3.0     2007年8月

2.0(Except LINQ/Query Extensions)

3.0(Except LINQ/Query Extensions)

3.5

2008、2010
C#4.0     2010年4月 4 2010
C#5.0     2012年10月 4.5 2012
4.5.1 2013
C#6.0     2015年7月 4.6 2015
C#7.0       4.6.2 2017

 

擴充閱讀:

Unity C# 5.0 and 6.0 Integration

.net、mono和C#

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.