首页 > 代码库 > .net、mono和C#

.net、mono和C#

.net  framework

wiki:en  chs

 

版本公共语言运行时(CLR)发布时间随同分发的Visual Studio预装于windows系统支持的windows系统
1.01.02002.2.23Visual Studio .NETWinXPWinXP
1.11.12003年4月24日Visual Studio .NET 2003 WinXP、Vista
2.02.02005年11月7日Visual Studio 2005 

WinXP、Vista、Win7、

Win8、Win8.1、Win10

3.02.02006年11月6日Microsoft Blend for Visual StudioVista
3.52.02007年11月19日Visual Studio 2008Win7
4.042010年4月12日Visual Studio 2010 

WinXP SP3、Vista SP1、Win7、

Win8、Win8.1、Win10

4.542012年8月15日Visual Studio 2012Win8

Vista SP2、Win7 SP1、

Win8、Win8.1、Win10

4.5.142013年10月17日Visual Studio 2013Win8.1
4.5.242014年5月5日  
4.642015年7月20日Visual Studio 2015Win10
4.6.142015年11月30日Visual Studio 2015 Update 1Win10 v1511
4.6.242016年8月2日 Win10 v1607
4.742017年4月5日Visual Studio 2017Win10 v1703

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

注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),库加载器,垃圾回收机器,线程操作,互操作性

(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.x2.02.03.54.0完全支持C#3.0,但也支持某些C#4.0特性(注:clr2.0支持下的特性)

5.3.5p8的测试版

5.5及以上版本

2.02.03.54.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版本
ECMAISO/IECMicrosoft
C#1.02002年12月2003年4月2002年1月1.02002
C#1.1、1.22003年10月1.12003
C#2.0 2006年6月 2006年9月2005年9月2.02005
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月42010
C#5.0  2012年10月4.52012
4.5.12013
C#6.0  2015年7月4.62015
C#7.0   4.6.22017

 

扩展阅读:

Unity C# 5.0 and 6.0 Integration

.net、mono和C#