2014年11月12日的Connect ();開發(fā)者活動上宣布將.NET堆?;贛IT協(xié)議開源,并且提供開源保證,托管在Github上。當時的版本與最終目標相距甚遠,然而有一點可以肯定的是,這是一個與.NET Framework 4.x完全不同的框架。
這在社區(qū)引發(fā)了諸多疑惑和爭論。進行劇烈變更的原因顯而易見:.NET Framework 4.x已經(jīng)無法充分發(fā)揮最新的技術的威力,而且無法完全滿足開發(fā)跨平臺,云化的大規(guī)模應用需求,而一個全新的框架可以讓.NET開發(fā)者以更簡單、更直接的方式來開發(fā)Web服務與應用。然而,大家普遍感到擔憂。如果把所使用的第三方軟件代碼庫升級到最新版本,然后導致不能向下兼容的問題,這是開發(fā)者最大的噩夢。遷移的問題看起來無比艱巨,甚至毫無可能,在github社區(qū)上大家提出了遷移思路,微軟dotnet團隊在統(tǒng)一.NET 三大平臺的基礎上,讓我們的遷移更加簡單,能充分享受到.NET Core的各種優(yōu)點。
Web的進化--大前端時代
近年來,Web已經(jīng)發(fā)生了大幅度的進化,以NodeJs為代表的,我們知道,Javascript最初開發(fā)的這門語言的時候,目標只是用來編寫簡單的客戶端腳本,但是隨著時間的推移,它的角色已經(jīng)發(fā)生了很大的轉(zhuǎn)變。現(xiàn)在,我們可以利用HTML5提供的API來處理音頻和視頻文件,用全雙工通道和外部服務進行通信,傳輸和處理大塊原始數(shù)據(jù),如此等等。我們已經(jīng)來到了大前端時代,大前端時代是WEB統(tǒng)一的時代,利用html5或者6甚至7,不但可以開發(fā)傳統(tǒng)的網(wǎng)站,做炫酷的網(wǎng)頁動態(tài)效果,更可以采用BS架構應用程序、開發(fā)手機端web應用、移動端Native應用程序、智能設備(比如可穿戴智能手表,可穿戴智能衣服)等。
ASP.NET Core作為.NET Core平臺上的Web服務開發(fā)框架也是順應大前端時代進行設計,ASP.NET Core是模塊化,內(nèi)置依賴注入,可集成任意前端框架的完全開源的Web平臺,統(tǒng)一了ASP.NET MVC/WEB API/SignalR的編程模型。
如果在.NET Framework 4.x/Mono平臺上來適應大前端時代,內(nèi)部實現(xiàn)會變得相當復雜。因為框架已開始壓根就不是基于這樣的一個時代進行設計的。想想我們哪笨重的WebForm框架是VB/Dephi流行的重客戶端時代的產(chǎn)品,微軟硬把他搬到了Web上,所以ASP.NET Core已經(jīng)不支持Web Form,ASP.NET MVC平臺是微軟為適應Web時代重新設計的一個開發(fā)平臺,從ASP.NET MVC 1.0 進化到ASP.NET MVC 6.0也就是這個Web的進化過程,在這個進化過程中,針對WEB的不同場景出現(xiàn)了三個平臺MVC,WEB API和SignalR。我們已經(jīng)來到了大前端時代,所以ASP.NET團隊考慮重新設計這個平臺。
云計算時代
近年來,我們已經(jīng)進入云計算時代,在云平臺的PaSS和SaSS上也是發(fā)生了大幅度的進化,以docker為代表。微軟的Azure平臺,google的GAE等等各大云計算廠商都提供了PaSS平臺,我們的應用程序要遷移到這樣的平臺上都需要進行重寫。Docker,給云計算帶來一場革新,Docker可以被認為是互聯(lián)網(wǎng)的集裝箱,可以靈活地封裝軟件,令其更快速地傳播。這對現(xiàn)代互聯(lián)網(wǎng)來說是一件大事,因為軟件都會運行上成百上千的機器上。Docker可以改變我們開發(fā)軟件的方式,令每個人都能便捷地利用大量的運算能力。Docker可以讓開發(fā)者專注于開發(fā)軟件,不需要考慮在哪里運行自己的軟件,這才是云計算的發(fā)展方向。開發(fā)者考慮應用本身就足夠了。
.NET 很難進入以docker為代表的云計算開發(fā)平臺,特別是Windows不支持Docker,因為那完全是互聯(lián)網(wǎng)服務的基石--Linux系統(tǒng)才有的技術,微軟為了適應這樣的云計算潮流,在Windows Server 2016/Windows 10上支持了docker,也重新開發(fā)跨平臺.NET Core的應用運行平臺。.NET實際上是一系列框架,每個框架針對一個特定平臺,而且歸不同的微軟團隊所有,這在API和實現(xiàn)方面都不可避免地產(chǎn)生了差異。.NET Core是.NET Framework的一個新的分支,旨在為特定于平臺的擴展提供一個共同的基礎。每個擴展提供只能用于特定應用程序模型的API,例如,面向.NET本地應用程序的WinRT互操作擴展或者面向ASP.NET Core應用程序的MVC。這個共同的層稱為統(tǒng)一基類庫(BCL),它位于一個包含.NET運行時的薄層之上。.NET Core帶來的另外一項有趣的變化是使用NuGet作為基本的交付系統(tǒng)。.NET Core將會作為一個細粒度的包的集合交付,每個包對應一個程序集。同時,微軟將提供.NET Core分發(fā)包。本質(zhì)上,它只是經(jīng)過微軟測試的、特定.NET版本的所有包的快照副本,用于那些不需要額外的自由進行NuGet包混搭的場景。NuGet的使用以及向更加模塊化的設計轉(zhuǎn)變使“.NET Core平臺有可能轉(zhuǎn)變成一種應用程序本地框架?!比绱艘粊恚總€應用程序?qū)⒅恍枰渴鹂蚣苤兴枰牟糠?。這樣做的主要好處是,當應用程序需要升級.NET Core時,將不會破壞與其它現(xiàn)有應用程序的兼容性,而升級整臺機器共享的.N