標籤: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#