.NET 開源三部曲(二): ASP.NET vNext 開源及 .NET Core

在今年的 Connect(); 技術大會上,Scott Guthrie 在 Keynote 上宣佈了目標會釋出 ASP.NET Server Framework for Mac/Linux 以及開源的 .NET Core 執行環境,簡單地講,基於 ASP.NET 這些開發的 Web 應用程式、伺服器上的應用程式將可以在非 Windows 平台上運行,這樣的願景,是希望讓 .NET 開發人員可以有更多發揮的平台,也因為這樣,我們已經看到甚至是現在火紅的 Docker 生態圈中都有了微軟官方製作 ASP.NET 環境的 Docker Container,這樣跨時代的改變,都要從 ASP.NET vNext 以及 .NET Core 的開源細節談起。

ASP.NET vNext

在現在的 ASP.NET 執行環境中,因為許多部份跟 IIS 相依性非常高,如果要為雲端環境優化,或是要走向開源之路都會變得困難且複雜,所以整個 ASP.NET team 決定要改寫核心,從去年(2013)開始,先起草了 OWIN (Open Web Interface for .NET)的規格,然後基於這個規格實作了 Katana 這個 ASP.NET 及其相關技術(如:ASP.NET Web API、ASP.NET Identity 等)的執行環境(準確地說是 middleware),這個部份可以參考黑暗執行緒的部落格文章,所以 Katana 本身就是一個可以執行 ASP.NET 應用程式的環境,不必依賴 IIS(當然,如果你的應用程式有元件不相容 Katana 當然就無法執行)。

而在今年 ASP.NET vNext 決定走向開放源碼的生態系之後,相關專案就移轉至 github 上面發展,如: KRuntime (KRE)就是 ASP.NET 的執行環境,而 Mvc 就是過去大家熟悉的 ASP.NET MVC、ASP.NET Web API、ASP.NET WebPages 的合體 ...... 目前你可以在 Windows、Linux 或 Mac 上編譯建置這些專案,然後就能在這些平台上面以新的 ASP.NET vNext 執行環境來執行 ASP.NET 的應用程式(我已經示範了簡單的步驟),撰文的此刻,在 Linux 或 Mac 上 KRE 都還是以 Mono 為基礎的 .NET 實作來運作,未來 .NET Core 在 Mac/Linux 上成熟之後,除了 Mono 之外,就多了 .NET Core CLR 的選擇,這也就是在 Connect() '14 上宣佈要釋出 .NET Server Framework for Mac/Linux 所意指的事。

同樣的,在 Connect() '14 上也宣佈了 ASP.NET vNext 的第一個里程碑會是 ASP.NET 5,目前已經隨著 Visual Studio 2015 Preview 一併推出,建立 Web 專案時可以特別選擇 ASP.NET 5 的專案範本:

而從專案的結構來看,是走 ASP.NET MVC 的風格(Controllers、Models、Views 這些目錄),而且除了原本專案設定檔 web.configpackage.config 這些 XML 格式的檔案,也都換成了 project.jsonpackage.json 這些 JSON 格式的檔案,眼尖的人可能也注意到了,ASP.NET 專案採用開源專案的程度愈來愈高,這些還加入了 bowergrunt 這些工具。

最後,在執行環境的部份還埋了一個梗:切換不同的 KRE 環境,其中的 Core CLR 環境就是稍後要介紹的 .NET Core。

.NET Core

原本的 .NET Framework 因為包山包海(要能夠符合 Desktop、WPF、Windows App、ASP.NET 等等),這樣的東西很難在雲端環境以輕巧之姿來運作雲端上的應用程式,所以 .NET team 決定發展一套輕巧的 .NET Core,詳細的技術內涵可以參考 .NET team 的這篇部落格文章,簡單地說,.NET Core 簡化了 Windows App 以及 ASP.NET 的 App 模型,並且基於此重新實作了與平台無關的類別函式庫(BCL - Base Class Library),示意圖像這樣:

而在這個架構下,所有東西都被切成模組化,而這些模組都可以透過 NuGet 來各自更新或更換:

目前 .NET Core 已經開源在 github 上面,如果你有興趣,可以自行 clone 下來,搭配已經開源的 .NET Compiler -- Roslyn 來編譯 Core CLR 的環境。