.net、mono和C#


.net

wiki:en  chs

 

.net版本 公共語言運行時(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是向上兼容的

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

注3:.net corechs是微軟重新開發的開源跨平台.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,公共語言規范)

               的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,wiki),庫加載器,垃圾回收機器,線程操作,互操作性

(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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM