2014年11月12日的Connect ();開發(fā)者活動(dòng)上宣布將.NET堆?;贛IT協(xié)議開源,并且提供開源保證,托管在Github上。當(dāng)時(shí)的版本與最終目標(biāo)相距甚遠(yuǎn),然而有一點(diǎn)可以肯定的是,這是一個(gè)與.NET Framework 4.x完全不同的框架。

這在社區(qū)引發(fā)了諸多疑惑和爭論。進(jìn)行劇烈變更的原因顯而易見:.NET Framework 4.x已經(jīng)無法充分發(fā)揮最新的技術(shù)的威力,而且無法完全滿足開發(fā)跨平臺(tái),云化的大規(guī)模應(yīng)用需求,而一個(gè)全新的框架可以讓.NET開發(fā)者以更簡單、更直接的方式來開發(fā)Web服務(wù)與應(yīng)用。然而,大家普遍感到擔(dān)憂。如果把所使用的第三方軟件代碼庫升級到最新版本,然后導(dǎo)致不能向下兼容的問題,這是開發(fā)者最大的噩夢。遷移的問題看起來無比艱巨,甚至毫無可能,在github社區(qū)上大家提出了遷移思路,微軟dotnet團(tuán)隊(duì)在統(tǒng)一.NET 三大平臺(tái)的基礎(chǔ)上,讓我們的遷移更加簡單,能充分享受到.NET Core的各種優(yōu)點(diǎn)。

Web的進(jìn)化--大前端時(shí)代

近年來,Web已經(jīng)發(fā)生了大幅度的進(jìn)化,以NodeJs為代表的,我們知道,Javascript最初開發(fā)的這門語言的時(shí)候,目標(biāo)只是用來編寫簡單的客戶端腳本,但是隨著時(shí)間的推移,它的角色已經(jīng)發(fā)生了很大的轉(zhuǎn)變。現(xiàn)在,我們可以利用HTML5提供的API來處理音頻和視頻文件,用全雙工通道和外部服務(wù)進(jìn)行通信,傳輸和處理大塊原始數(shù)據(jù),如此等等。我們已經(jīng)來到了大前端時(shí)代,大前端時(shí)代是WEB統(tǒng)一的時(shí)代,利用html5或者6甚至7,不但可以開發(fā)傳統(tǒng)的網(wǎng)站,做炫酷的網(wǎng)頁動(dòng)態(tài)效果,更可以采用BS架構(gòu)應(yīng)用程序、開發(fā)手機(jī)端web應(yīng)用、移動(dòng)端Native應(yīng)用程序、智能設(shè)備(比如可穿戴智能手表,可穿戴智能衣服)等。

ASP.NET Core作為.NET Core平臺(tái)上的Web服務(wù)開發(fā)框架也是順應(yīng)大前端時(shí)代進(jìn)行設(shè)計(jì),ASP.NET Core是模塊化,內(nèi)置依賴注入,可集成任意前端框架的完全開源的Web平臺(tái),統(tǒng)一了ASP.NET MVC/WEB API/SignalR的編程模型。

如果在.NET Framework 4.x/Mono平臺(tái)上來適應(yīng)大前端時(shí)代,內(nèi)部實(shí)現(xiàn)會(huì)變得相當(dāng)復(fù)雜。因?yàn)榭蚣芤验_始壓根就不是基于這樣的一個(gè)時(shí)代進(jìn)行設(shè)計(jì)的。想想我們哪笨重的WebForm框架是VB/Dephi流行的重客戶端時(shí)代的產(chǎn)品,微軟硬把他搬到了Web上,所以ASP.NET Core已經(jīng)不支持Web Form,ASP.NET MVC平臺(tái)是微軟為適應(yīng)Web時(shí)代重新設(shè)計(jì)的一個(gè)開發(fā)平臺(tái),從ASP.NET MVC 1.0 進(jìn)化到ASP.NET MVC 6.0也就是這個(gè)Web的進(jìn)化過程,在這個(gè)進(jìn)化過程中,針對WEB的不同場景出現(xiàn)了三個(gè)平臺(tái)MVC,WEB API和SignalR。我們已經(jīng)來到了大前端時(shí)代,所以ASP.NET團(tuán)隊(duì)考慮重新設(shè)計(jì)這個(gè)平臺(tái)。

云計(jì)算時(shí)代

近年來,我們已經(jīng)進(jìn)入云計(jì)算時(shí)代,在云平臺(tái)的PaSS和SaSS上也是發(fā)生了大幅度的進(jìn)化,以docker為代表。微軟的Azure平臺(tái),google的GAE等等各大云計(jì)算廠商都提供了PaSS平臺(tái),我們的應(yīng)用程序要遷移到這樣的平臺(tái)上都需要進(jìn)行重寫。Docker,給云計(jì)算帶來一場革新,Docker可以被認(rèn)為是互聯(lián)網(wǎng)的集裝箱,可以靈活地封裝軟件,令其更快速地傳播。這對現(xiàn)代互聯(lián)網(wǎng)來說是一件大事,因?yàn)檐浖紩?huì)運(yùn)行上成百上千的機(jī)器上。Docker可以改變我們開發(fā)軟件的方式,令每個(gè)人都能便捷地利用大量的運(yùn)算能力。Docker可以讓開發(fā)者專注于開發(fā)軟件,不需要考慮在哪里運(yùn)行自己的軟件,這才是云計(jì)算的發(fā)展方向。開發(fā)者考慮應(yīng)用本身就足夠了。

.NET 很難進(jìn)入以docker為代表的云計(jì)算開發(fā)平臺(tái),特別是Windows不支持Docker,因?yàn)槟峭耆腔ヂ?lián)網(wǎng)服務(wù)的基石--Linux系統(tǒng)才有的技術(shù),微軟為了適應(yīng)這樣的云計(jì)算潮流,在Windows Server 2016/Windows 10上支持了docker,也重新開發(fā)跨平臺(tái).NET Core的應(yīng)用運(yùn)行平臺(tái)。.NET實(shí)際上是一系列框架,每個(gè)框架針對一個(gè)特定平臺(tái),而且歸不同的微軟團(tuán)隊(duì)所有,這在API和實(shí)現(xiàn)方面都不可避免地產(chǎn)生了差異。.NET Core是.NET Framework的一個(gè)新的分支,旨在為特定于平臺(tái)的擴(kuò)展提供一個(gè)共同的基礎(chǔ)。每個(gè)擴(kuò)展提供只能用于特定應(yīng)用程序模型的API,例如,面向.NET本地應(yīng)用程序的WinRT互操作擴(kuò)展或者面向ASP.NET Core應(yīng)用程序的MVC。這個(gè)共同的層稱為統(tǒng)一基類庫(BCL),它位于一個(gè)包含.NET運(yùn)行時(shí)的薄層之上。.NET Core帶來的另外一項(xiàng)有趣的變化是使用NuGet作為基本的交付系統(tǒng)。.NET Core將會(huì)作為一個(gè)細(xì)粒度的包的集合交付,每個(gè)包對應(yīng)一個(gè)程序集。同時(shí),微軟將提供.NET Core分發(fā)包。本質(zhì)上,它只是經(jīng)過微軟測試的、特定.NET版本的所有包的快照副本,用于那些不需要額外的自由進(jìn)行NuGet包混搭的場景。NuGet的使用以及向更加模塊化的設(shè)計(jì)轉(zhuǎn)變使“.NET Core平臺(tái)有可能轉(zhuǎn)變成一種應(yīng)用程序本地框架?!比绱艘粊?,每個(gè)應(yīng)用程序?qū)⒅恍枰渴鹂蚣苤兴枰牟糠?。這樣做的主要好處是,當(dāng)應(yīng)用程序需要升級.NET Core時(shí),將不會(huì)破壞與其它現(xiàn)有應(yīng)用程序的兼容性,而升級整臺(tái)機(jī)器共享的.N