.net、mono和C#
.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
.net、mono和C#的更多相关文章
- tLinux 2.2下安装Mono 4.8
Tlinux2.2发行版基于CentOS 7.2.1511研发而成,内核版本与Tlinux2.0发行版保持完全一致,更加稳定,并保持对Tlinux2.0的完全兼容.Mono 4版本要求CentOS 7 ...
- 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...
- Mono为何能跨平台?聊聊CIL(MSIL)
前言: 其实小匹夫在U3D的开发中一直对U3D的跨平台能力很好奇.到底是什么原理使得U3D可以跨平台呢?后来发现了Mono的作用,并进一步了解到了CIL的存在.所以,作为一个对Unity3D跨平台能力 ...
- 在.NET Core之前,实现.Net跨平台之Mono+CentOS+Jexus初体验
准备工作 本篇文章采用Mono+CentOS+Jexus的方式实现部署.Net的Web应用程序(实战,上线项目). 不懂Mono的请移步张善友大神的:国内 Mono 相关文章汇总 不懂Jexus为何物 ...
- 【月入41万】Mono For Android中使用百度地图SDK
借助于Mono For Android技术,.Net开发者也可以使用自己熟悉的C#语言以及.Net来开发Android应用.由于Mono For Android把Android SDK中绝大部分类库都 ...
- 运用Mono.Cecil 反射读取.NET程序集元数据
CLR自带的反射机智和API可以很轻松的读取.NET程序集信息,但是不能对程序集进行修改.CLR提供的是只读的API,但是开源项目Mono.Cecil不仅仅可以读取.NET程序集的元数据,还可以进行修 ...
- Mono on CentOS 6.3 安装笔记
在网上找到篇关于yum的文章,写的很详细特此推荐下,在阅读本文之前建议先看看它: <CentOS yum源的配置与使用> 如果用的是移动光驱,建议不要开启本地的yum 的本地reposit ...
- MemoryMappedFile 在 Mono in Linux 的开发笔记
前言 MemoryMappedFile(简称MMF)类是.NET中对内存映射文件进行操作的类,内存映射文件是非常高效的本地IO方案,由操作系统提供内存与IO文件之间的映射转换,对内存映射文件的更改由操 ...
- 在Linux(Ubuntu/openSUSE/CentOS)下配置ASP.NET(Apache + Mono)
[题外话] 闲的无聊竟然想尝试测试自己做的项目在不同操作系统上的性能表现,所以决定试试在Linux上部署Apache和Mono的环境.由于平时很少接触Linux,所以从网上找了几篇文章(附在相关链接中 ...
- Ubuntu下利用Mono,Jexus搭建Asp.Net(MVC) Web服务器
最近在Ubuntu上搭建了Asp.Net的Web服务器,其中遇到很多问题,整理一下思路,以备后用. 搭建环境以及配套软件 Ubuntu: 11.10 Mono:3.0.6 下载地址(http://do ...
随机推荐
- GenericFactoryMethod泛型工厂模式实现简单IOC功能
1.简介 泛型工厂理论上不算Gof23中设计模式之一,但是也算是一种非常好的设计模式,个人认为,废话不多说,先写个简单的抽象工厂,在写一个泛型工厂的例子来比较抽象和泛型的区别. 2.实战 还是房屋和道 ...
- 关于EF的三种分类----CodeFirst
新建StudentInfo.cs using System; using System.Collections.Generic; using System.ComponentModel.DataAnn ...
- SHELL脚本--shell数组基础
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 数组和变量的区别是:变量在内存中占用的空间是离散的,数组在内存 ...
- ElasticSearch+Logstash+Filebeat+Kibana集群日志管理分析平台搭建
一.ELK搜索引擎原理介绍 在使用搜索引擎是你可能会觉得很简单方便,只需要在搜索栏输入想要的关键字就能显示出想要的结果.但在这简单的操作背后是搜索引擎复杂的逻辑和许多组件协同工作的结果. 搜索引擎的组 ...
- OJ:一道考察多态的题目
Description 下面程序的输出结果是: A::Fun C::Do 程序代码 #include <iostream> using namespace std; class A { p ...
- OJ:重载 << 运算符
Description 补足程序,使得下面程序输出的结果是: ****100 #include <iostream> #include <string> using names ...
- 安装LoadRunner时提示缺少vc2005_sp1_with_atl_fix_redist解决方案
操作系统重装后,安装LoadRunner11时,会报缺少vc2005_sp1_with_atl_fix_redist错误,类似下图所示: LR自动安装失败,在网上下载此组件安装后依然提示此信息,最终解 ...
- 南大算法设计与分析课程复习笔记(3)L3 - Recursion
一.递归方程 按照分治的思想,可以将一个递归的复杂度写成递归方程 一.解递归方程--猜然后证明 该方法又称为代入法,步骤如下: 1.猜解的形式 2.数学归纳法证明正确 例子: 我们假设有如下递归式: ...
- Python GUI
1.flexx Flexx 是一个纯Python工具包,用来创建图形化界面应用程序.其使用 Web 技术进行界面的渲染.你可以用Flexx来创建桌面应用,同时也可以导出一个应用到独立的 HTML 文档 ...
- MyBatis3-配置使用log4j输出日志
配置步骤: 1.POM的依赖引入 <!-- log4j --> <!-- https://mvnrepository.com/artifact/log4j/log4j --> ...