.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

.net、mono和C#的更多相关文章

  1. tLinux 2.2下安装Mono 4.8

    Tlinux2.2发行版基于CentOS 7.2.1511研发而成,内核版本与Tlinux2.0发行版保持完全一致,更加稳定,并保持对Tlinux2.0的完全兼容.Mono 4版本要求CentOS 7 ...

  2. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

    最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...

  3. Mono为何能跨平台?聊聊CIL(MSIL)

    前言: 其实小匹夫在U3D的开发中一直对U3D的跨平台能力很好奇.到底是什么原理使得U3D可以跨平台呢?后来发现了Mono的作用,并进一步了解到了CIL的存在.所以,作为一个对Unity3D跨平台能力 ...

  4. 在.NET Core之前,实现.Net跨平台之Mono+CentOS+Jexus初体验

    准备工作 本篇文章采用Mono+CentOS+Jexus的方式实现部署.Net的Web应用程序(实战,上线项目). 不懂Mono的请移步张善友大神的:国内 Mono 相关文章汇总 不懂Jexus为何物 ...

  5. 【月入41万】Mono For Android中使用百度地图SDK

    借助于Mono For Android技术,.Net开发者也可以使用自己熟悉的C#语言以及.Net来开发Android应用.由于Mono For Android把Android SDK中绝大部分类库都 ...

  6. 运用Mono.Cecil 反射读取.NET程序集元数据

    CLR自带的反射机智和API可以很轻松的读取.NET程序集信息,但是不能对程序集进行修改.CLR提供的是只读的API,但是开源项目Mono.Cecil不仅仅可以读取.NET程序集的元数据,还可以进行修 ...

  7. Mono on CentOS 6.3 安装笔记

    在网上找到篇关于yum的文章,写的很详细特此推荐下,在阅读本文之前建议先看看它: <CentOS yum源的配置与使用> 如果用的是移动光驱,建议不要开启本地的yum 的本地reposit ...

  8. MemoryMappedFile 在 Mono in Linux 的开发笔记

    前言 MemoryMappedFile(简称MMF)类是.NET中对内存映射文件进行操作的类,内存映射文件是非常高效的本地IO方案,由操作系统提供内存与IO文件之间的映射转换,对内存映射文件的更改由操 ...

  9. 在Linux(Ubuntu/openSUSE/CentOS)下配置ASP.NET(Apache + Mono)

    [题外话] 闲的无聊竟然想尝试测试自己做的项目在不同操作系统上的性能表现,所以决定试试在Linux上部署Apache和Mono的环境.由于平时很少接触Linux,所以从网上找了几篇文章(附在相关链接中 ...

  10. Ubuntu下利用Mono,Jexus搭建Asp.Net(MVC) Web服务器

    最近在Ubuntu上搭建了Asp.Net的Web服务器,其中遇到很多问题,整理一下思路,以备后用. 搭建环境以及配套软件 Ubuntu: 11.10 Mono:3.0.6 下载地址(http://do ...

随机推荐

  1. TypeError: Cannot red property 'style' of null 错误解决

    错误信息如下: JSP代码如下: <c:if test ="${not empty excelErrors}"> <div id="excelError ...

  2. java jar 后台运行

    nohup java -jar $APP_NAME.jar >/dev/null &

  3. springboot~让我习惯了TDD的开发模式

    TDD是什么 TDD就是测试驱动开发,以测试用例为主导,去开发项目,业务代码该怎么写还是怎么写,在实现UI之前,可以先实现Test用例,通过test来实现对业务场景的模拟,最终让你的代码更稳定. 大叔 ...

  4. java数据类型大转换

    1.字符串类型向整形转换 int age = Integer.parseInt(strAge); 2 int -> String int i=12;String s="";第 ...

  5. Docker 构建映像

    .用docker commit构建映像 .docker run -i -t centos /bin/bash //启动一个容器,启动后默认进入该窗口的bash进程 .yum install -y ep ...

  6. spring-boot(五) RabbitMQ详解 定时任务

    学习文章来自:springboot(八):RabbitMQ详解 springboot(九):定时任务 RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分 ...

  7. DynamicProxy系列目录

    C# 1.基于Emit实现动态代理 2.Microsoft.CodeAnalysis动态生成代理类 3.castle dynamicproxy + AutoFac 4.DispatchProxy .R ...

  8. CC2530微处理器接口开发技术——信号灯的设计与实现

    本问主要介绍了CC2530处理器的通用输入/输出接口(GPIO),以及GPIO的位操作,理解GPIO的基本原理和功能,最后使用C语言驱动CC2530的GPIO实现对信号灯的控制. CC2530的GPI ...

  9. ARM 汇编指令 ADR 与 LDR 使用

    简介 这两个都是伪指令:ADR 是小范围的地址读取伪指令,LDR 是大范围的读取地址伪指令.可实际使用的区别是: ADR 是将基于 PC 相对偏移的地址值或基于寄存器相对地址值读取的伪指令,而 LDR ...

  10. Linux命令-设置免密码登录

    设置免密码登陆:[root@Redis01 test]# cd /install/[root@Redis01 install]# rm -rf test/[root@Redis01 install]# ...