.NET Core 序

Develop high performance applications in less time, on any platform.

.NET——用更少的时间在任意平台上开发高性能应用。

微软推出全新的.NET Core平台也有一段时间了,是时候填一下这个系列的坑了。

.NET 开发系列文章目录

  1. .NET Core 序
  2. .NET Core 开发准备
  3. 未完待续

What is .NET

.NET是一个可以在任何系统、任何设备上进行应用和服务开发的平台。它拥有惊人的性能和开发效率,并且拥有数百万的开发者。

.NET是由微软开发,一个致力于敏捷软件开发(Agile software development)、快速应用开发(Rapid application development)、平台无关性和网络透明化的软件开发平台。

.NET Framework

传统的.NET Framework是以一种采用系统虚拟机运行的编程平台,以公共语言运行时(Common Language Runtime,简称CLR)为基础,支持多种语言(C#、F#、VB.NET、C++、Python等)的开发。

说起.NET的起源,还得先说到Java。众所周知,Java是一个主打敏捷开发,跨平台的编程语言。而.NET的诞生,与Java有着千丝万缕的联系。

Java的历史可以追溯到20世纪90年代,最初是由Sun公司为了实现电子产品智能化而开发的程序语言,主打的设计思想是敏捷开发和跨平台。1995年Java正式推出之后,立刻受到了包括IBM、Apple、Adobe、HP和微软在内的各大公司的追捧。随后几年Java的发展势如破竹,作为一款收费产品,Java给Sun公司带来了非常可观的盈利(Java已于2006年底宣布免费开源)。而微软作为软件大厂,当然不愿看着Java一家独大,同时也意识到了敏捷开发的巨大前景,由此诞生了Microsoft .NET。

.NET框架作为Visual Studio的组件之一发放,自2002年全新VS.NET搭载.NET 1.0起,.NET至今已更新四个主版本,.NET 4.0于2010年随VS2010发布,而目前最新的VS2015搭载的是.NET 4.6版本。

.NET与Java有非常多的相似之处,二者都是即时编译(JIT)的动态语言。这类语言中,项目编译生成的目标文件并不是机器码,而是需要由运行时环境进行即时编译的特殊代码。在Java中这种特殊代码叫做字节码(bytecode),而.NET中则叫做中间语言(Common Intermediate Language,简称IL)。Java官方的运行时环境叫做JRE(Java Runtime Environment),而.NET官方的运行时环境叫做CLR(Common Language Runtime)。

Mono

.NET Framework是由微软独立开发,闭源且具有专利性质的独家技术。微软只对.Net Framework提供针对Windows系统的支持。而作为同类竞争对手的Java,却能通杀包括x86、ARM在内的主流硬件平台,软件方面也支持包括Windows、Linux、Android在内的各种桌面、移动、嵌入式系统。

因此,为了提升.NET的平台适应性,微软在.NET发展之初就建立了一套对于.NET中间语言的实现规范——.NET Common Language Infrastructure,这相当于一套关于.NET中间语言(IL)的语法手册,微软希望通过这种方式让第三方和开源社区来参与.NET的平台移植。

Ximian公司是最早参与这项工作的成员之一,并于2004年6月发布了第一代.NET跨平台产品——Mono 1.0。

Mono与微软官方的CLR一样,都是对.NET CLI(Common Language Infrastructure)的实现,他们都能对.NET的中间代码(IL)提供实时编译。不同的是,CLR只支持Windows系统,而Mono如今已支持包括Windows、Linux、macOS、iOS、Android在内的各种主流平台和操作系统。

著名的游戏引擎Unity3D就包含了Mono,我们所熟知的《Tample Run 神庙逃亡》、《炉石传说》、《Deemo》等游戏都是基于Unity3D开发的(包含.NET和Mono的技术)。

值得一提的是,Mono是一个有故事的项目,十几年来历经波折,几经转手,于2011年落入Xamarin公司手中,其间Mono还与微软发生过专利纠纷。

可喜的是,2016年2月,微软正式收购Xamarin,从此Mono回到了微软霸霸的怀抱,成了亲生儿子,同时微软宣布Mono面向社区免费。在2016年11月的Connect(); //2016开发者大会中,微软还发布了基于Xamarin Studio改造的Visual Studio for mac。

.NET Core

自.NET Framework发布至今已有十余年,由于微软过于保守的版权策略,.NET一直作为Windows平台的封闭产品。尽管有Mono项目对.NET实现了平台移植,但毕竟不是微软“亲生”,Mono在一些实现上仍然不够完美。

随着2014年Xamarin和微软发起.NET基金会,微软在2014年11月份开放.NET框架源代码。随后在.NET开源基金会的统一规划下诞生了.NET Core。(注:.NET Core早期被称为.NET vNext或.NET 5,直到2016年1月才正式命名为.NET Core 1.0)

需要注意的是,尽管微软把.NET Core作为.NET未来的发展方向,但.NET Core和.NET Framework仍然是两个独立的产品。.NET Framework也会继续更新和维护。

.NET Core与.NET Framework最大的区别在于.NET Core是完全开源的,托管在github上,支持任何人向项目贡献代码。并且,.NET Core不再是Windows独占,还支持Linux、macOS等多种平台。

.NET Core是一个全新的框架,截至2015年末,.NET Core大约实现了.NET Framework中25%的API。之后官方并没有再更新过具体比例,但已知的是,.NET Core会抛弃传统框架中一些过时的API,例如System.Data.DataTable、System.Data.DataSet这类传统的数据操作API。另外,.NET Core目前没有提供任何图形界面的API,官方也尚未发表关于图形界面的Roadmap。

.NET Core目前最新版本是1.1.0(发布于2016年11月)。

注1:随着.NET技术的发展,时至今日,广义的.NET指包含.NET Framework,.NET Core,Mono在内,是基于.NET技术的整个产品系列。而在过去的习惯中,.NET通常特指.NET Framework这一个最正统的框架。

注2:.Net Core也有两重概念,广义来说,Core指全新的一整套框架,包括运行时,命令行工具,项目结构定义等等。Core结构的项目,支持指定Framework、Mono或者Core中的一者或多者作为运行时环境。而狭义上的Core,仅特指.NET Core CLR(运行时)。请根据上下文和语境区分其定义。

ASP.NET

严谨来说,ASP.NET本不应该放在此处与以上三个框架平行,但是因为ASP.NET太出名了,因此我不得不在这说清关系。

ASP.NET最初是.NET Framework框架中的一个组件,用于开发Web应用程序。它是ASP技术的改进版本,需要注意的是,ASP与ASP.NET是完全不同的两个产品。同理,VB和VB.NET也是完全不同的两个产品。ASP和VB都是上个世纪的技术,过于古老在此不再赘述,但请务必注意区分它们。

早期的ASP.NET提供一种叫做WebForm的方式用于呈现网页,它可以让网页开发变得像WinForm开发一样简单且可视化。但由于WEB技术的飞速发展,WebForm由于其低效、封闭和难以定制的缺陷已经逐渐淡出历史舞台。

随着.NET 3.5的发布,微软提供了全新的ASP.NET网页呈现方式,称为ASP.NET MVC Framework。这套框架遵循MVC设计模式思想,将视图和逻辑进行了很好的分离,并且大幅提升了性能和可定制性。

经过多年发展,目前已经更新到了ASP.NET MVC6,MVC6完全采用.NET Core的项目结构,支持Framework、Core、Mono多种运行时。因此,ASP.NET MVC6也被称为ASP.NET Core。

参考文献