.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 ...
随机推荐
- Web Service 部分内容简述(2)
1. CORBA是什么?用途是什么? CORBA 标准是公共对象请求代理结构(Common Object Request Broker Architecture),由对象管理组织 (Object M ...
- centos7非centos标准服务 /etc/init.d/service_name start || stop 启动异常
公司自己写的java程序,在centos7系统执行/etc/init.d/service_name start||stop的时候报错: grafana二次开发的程序 [root@docp1 init. ...
- 云数据库POLARDB优势解读之①——10分钟了解
什么是POLARDB POLARDB 是阿里云自研的下一代关系型分布式数据库,100%兼容MySQL,之前使用MySQL的应用程序不需要修改一行代码,即可使用POLARDB. POLARDB在运行形态 ...
- 基于jQuery消息提示框插件Tipso
今天要分享的这款jQuery消息提示框插件名叫Tipso,它的特点是可以定义提示框的显示位置,以及动态改变提示框的提示内容,应该说是一款相当灵活的jQuery消息提示框插件.效果图如下: 在线预览 ...
- 【mac】ansible安装及基础使用
安装 环境释放 mac 10.12.5 #more /System/Library/CoreServices/SystemVersion.plist 安装命令 #ruby -e "$(cur ...
- maven web工程缺少 src/main/java 和 src/test/java 资源文件夹的方法
右键打开:build path -> configure build path... 在弹出的界面,选择: 编辑后: 点击finish,即可完成
- WPF DevExpress ChartControl用法
WPF常用的第三方控件集,DevExpress中ChartControl的使用 下面介绍如何生成Chart界面: <dxc:ChartControl AnimationMode="On ...
- C# Winform打包部署时添加注册表信息实现开机自启动
1.原理:需要开机自启动的程序,需要将其启动程序的路径写到注册表中指定的文件夹下 2. 写入注册表的方式有两种 a.在生成安装程序时配置 b.在程序运行时,动态配置 方法一:使用VS2010自带的打包 ...
- [android] 采用post的方式提交数据
GET:内部实现是组拼Url的方式,http协议规定最大长度4kb,ie浏览器限制1kb POST和GET的区别比较了一下,多了几条信息 Content-Type:application/x-www- ...
- [nodejs] nodejs开发个人博客(四)数据模型
数据库模型 /model/db.js 数据库操作类,完成链接数据库和数据库的增删查改 查询表 /*查询*/ select:function(tableName,callback,where,field ...