.net
.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 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,公共語言規范)
的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
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.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#
版本 | 語言規格 | .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