.net、mono和C#
.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 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
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#相关推荐
- linux ubuntu安装 mono,在Ubuntu 18.04系统中安装Mono及基本使用Mono的方法
本文介绍在Ubuntu 18.04操作系统中安装Mono及基本使用Mono的方法.Mono是一个基于ECMA/ISO标准开发和运行跨平台应用程序的平台,它是Microsoft .NET框架的免费开源实 ...
- mono+jexus 部署之CompilationException
使用 HelpPage 组件 CompilationException 好不容易在ubuntu上搭建了mono+jexus,欣喜若狂的部署上发布的网站,急忙打开,成功运行. 但是别高兴的太早,当我打开 ...
- apktoolkit apk反编译没有文件_重新编译mono——修改apk中Assembly-CSharp.dll并重新打包...
环境: 操作系统:Mac OSX10.12.6 mono版本:unity2017.1.3p4 NDK版本:android-ndk-r10e 一.指导步骤: 1.通过apktool工具反编译apk 2. ...
- mono和monodevelop源码编译安装
之所以用源码编译的方式安装mono和monodevelop,是因为通过yum安装的mono不是最新版本,而且monodevelop不能建 asp.net MVC3的工程. 而且通过源码安装,可以进一步 ...
- 从游戏脚本语言说起,剖析Mono所搭建的脚本基础
0x00 前言 在日常的工作中,我偶尔能遇到这样的问题:"为何游戏脚本在现在的游戏开发中变得不可或缺?".那么这周我就写篇文章从游戏脚本聊起,分析一下游戏脚本因何出现,而mono又 ...
- Ubuntu阿里云搭建Mono.net环境
查看磁盘信息 我们买的系统默认情况下只是安装了系统,而数据盘需要自己挂载,例如我这里的系统占用20多G,还有40多G的数据盘默认是没有挂载的,首先我们运行df -h查看: root@AY1212241 ...
- 使用Mono管理Coyote Linux
Coyote是一个个人防火墙配置Linux的目的是为了保护家庭或教育网络. 这个防火墙产品牌的个人及教育用途,并提供免费下载:http://coyotelinux.com/ CoyoteLinux u ...
- Mono源代码学习笔记:Console类(四)
NullStream 类 (internal class) 下面就是 mcs/class/corlib/System.IO/NullStream.cs: 01: namespace System.IO ...
- mono上运行程序常见问题
1. System.BadImageFormatException: Invalid method header local vars signature token 0x 65d5b2 File n ...
- 扒一扒.net、.net framework、mono和Unity
zhaichao 标签: .net.net frameworkc#monounity 2017-04-23 14:39 425人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许 ...
最新文章
- 关于 npm 中 lru-cache 之 maxAge 盲点 源码分析
- JZOJ 5406. 【NOIP2017提高A组模拟10.10】Tree
- 三星s3android wear,三星galaxy wearable下载
- flask入门2-模板引擎
- mac上数据库管理工具Navicat Premium 连接mySQL
- HTML基础教程笔记(HTML5与CSS3基础教程书)
- 计算机内存调用优化,Memory Cleaner——简单好用的Windows内存优化工具
- 几个在线的web代理
- 快速非支配排序 python版
- 程序员修炼(一)----剑指天下
- cannot find -l****问题的解决办法
- 专家揭示连锁加盟陷阱
- HTML基础 冲冲冲
- 输入一个字符串并原样输出。
- HTML5七夕情人节表白网页制作【纯HTML+CSS实现3D动态相册-蓝色海洋 】HTML+CSS+JavaScript
- 把1,2,3,4,5,6,7,8,9九个数分成三组,各个数字使用一次
- 3600000毫秒等于多少小时_工地扬尘监测规定-多少算超标?
- 操原作业(一)之Ubuntu编译新内核
- 屌炸天的内核来袭,史上最小chromium内核miniblink!
- Linux 解压方式总结
热门文章
- 无限循环python代码_python - 代码遇到意外的无限循环? - SO中文参考 - www.soinside.com...
- m苹果放n篮子_能用一只手,我绝对不用一双:苹果试图解锁更多Apple Watch控制手势...
- android studio配置国内,Android studio配置国内镜像源
- 计算机设计大赛作品评语,第九届大学生短片大赛获奖作品评语
- python123程序设计题答案第三周_Python 3 程序设计学习指导与习题解答
- unity ui框架_[教程汇总+持续更新]Unity从入门到入坟——收藏这一篇就够了
- java image getscaledinstance_使用getImage()和getScaledInstance()调整java.awt.Image的异常大小...
- java catch自定义异常_Laravel - 自定义处理程序中的Catch异常
- java 8的内存分代改进_java8的内存结构,这一篇文章就够了
- Android模拟器远程,使用Android模拟器进行远程调试