2014年11月12日的Connect ();开发者活动上宣布将.NET堆栈基于MIT协议开源,并且提供开源保证,托管在Github上。当时的版本与最终目标相距甚远,然而有一点可以肯定的是,这是一个与.NET Framework 4.x完全不同的框架。
这在社区引发了诸多疑惑和争论。进行剧烈变更的原因显而易见:.NET Framework 4.x已经无法充分发挥最新的技术的威力,而且无法完全满足开发跨平台,云化的大规模应用需求,而一个全新的框架可以让.NET开发者以更简单、更直接的方式来开发Web服务与应用。然而,大家普遍感到担忧。如果把所使用的第三方软件代码库升级到最新版本,然后导致不能向下兼容的问题,这是开发者最大的噩梦。迁移的问题看起来无比艰巨,甚至毫无可能,在github社区上大家提出了迁移思路,微软dotnet团队在统一.NET 三大平台的基础上,让我们的迁移更加简单,能充分享受到.NET Core的各种优点。
Web的进化--大前端时代
近年来,Web已经发生了大幅度的进化,以NodeJs为代表的,我们知道,Javascript最初开发的这门语言的时候,目标只是用来编写简单的客户端脚本,但是随着时间的推移,它的角色已经发生了很大的转变。现在,我们可以利用HTML5提供的API来处理音频和视频文件,用全双工通道和外部服务进行通信,传输和处理大块原始数据,如此等等。我们已经来到了大前端时代,大前端时代是WEB统一的时代,利用html5或者6甚至7,不但可以开发传统的网站,做炫酷的网页动态效果,更可以采用BS架构应用程序、开发手机端web应用、移动端Native应用程序、智能设备(比如可穿戴智能手表,可穿戴智能衣服)等。
ASP.NET Core作为.NET Core平台上的Web服务开发框架也是顺应大前端时代进行设计,ASP.NET Core是模块化,内置依赖注入,可集成任意前端框架的完全开源的Web平台,统一了ASP.NET MVC/WEB API/SignalR的编程模型。
如果在.NET Framework 4.x/Mono平台上来适应大前端时代,内部实现会变得相当复杂。因为框架已开始压根就不是基于这样的一个时代进行设计的。想想我们哪笨重的WebForm框架是VB/Dephi流行的重客户端时代的产品,微软硬把他搬到了Web上,所以ASP.NET Core已经不支持Web Form,ASP.NET MVC平台是微软为适应Web时代重新设计的一个开发平台,从ASP.NET MVC 1.0 进化到ASP.NET MVC 6.0也就是这个Web的进化过程,在这个进化过程中,针对WEB的不同场景出现了三个平台MVC,WEB API和SignalR。我们已经来到了大前端时代,所以ASP.NET团队考虑重新设计这个平台。
云计算时代
近年来,我们已经进入云计算时代,在云平台的PaSS和SaSS上也是发生了大幅度的进化,以docker为代表。微软的Azure平台,google的GAE等等各大云计算厂商都提供了PaSS平台,我们的应用程序要迁移到这样的平台上都需要进行重写。Docker,给云计算带来一场革新,Docker可以被认为是互联网的集装箱,可以灵活地封装软件,令其更快速地传播。这对现代互联网来说是一件大事,因为软件都会运行上成百上千的机器上。Docker可以改变我们开发软件的方式,令每个人都能便捷地利用大量的运算能力。Docker可以让开发者专注于开发软件,不需要考虑在哪里运行自己的软件,这才是云计算的发展方向。开发者考虑应用本身就足够了。
.NET 很难进入以docker为代表的云计算开发平台,特别是Windows不支持Docker,因为那完全是互联网服务的基石--Linux系统才有的技术,微软为了适应这样的云计算潮流,在Windows Server 2016/Windows 10上支持了docker,也重新开发跨平台.NET Core的应用运行平台。.NET实际上是一系列框架,每个框架针对一个特定平台,而且归不同的微软团队所有,这在API和实现方面都不可避免地产生了差异。.NET Core是.NET Framework的一个新的分支,旨在为特定于平台的扩展提供一个共同的基础。每个扩展提供只能用于特定应用程序模型的API,例如,面向.NET本地应用程序的WinRT互操作扩展或者面向ASP.NET Core应用程序的MVC。这个共同的层称为统一基类库(BCL),它位于一个包含.NET运行时的薄层之上。.NET Core带来的另外一项有趣的变化是使用NuGet作为基本的交付系统。.NET Core将会作为一个细粒度的包的集合交付,每个包对应一个程序集。同时,微软将提供.NET Core分发包。本质上,它只是经过微软测试的、特定.NET版本的所有包的快照副本,用于那些不需要额外的自由进行NuGet包混搭的场景。NuGet的使用以及向更加模块化的设计转变使“.NET Core平台有可能转变成一种应用程序本地框架。”如此一来,每个应用程序将只需要部署框架中它需要的部分。这样做的主要好处是,当应用程序需要升级.NET Core时,将不会破坏与其它现有应用程序的兼容性,而升级整台机器共享的.N
