靈活的跨平臺執行時需求
早期 .NET Framework 版本一直作為單一且全面的整體進行安裝,每個新版本都包含了新功能和幾乎所有早期功能,而鮮有刪減,這就不可避免的造成Framework的體積的增長。這種模式確保了安裝了新版 Framework的Windows系統可以相容所有早期版本的.NET 應用,但是也意味著每個應用都將執行在一個龐大冗餘的框架上,即使很多功能在實際專案中沒有使用。
相信每位.NET程式設計師都遇到過以下尷尬的決策場景:當收到Framework有更新發布時的通知時,是放棄使用新增功能保持應用的靈活性還是使用新特性而忍痛讓你的Framework更加龐大!
為了應對以上場景。ASP.NET 5提供了三種執行時,你可以根據實際需要靈活選擇:
1. 全功能.NET CLR
全功能.NET CLR 是Visual Studio工程預設執行時狀態。它提供所有 API,是保持應用向下相容性最佳選擇。
2. 核心CLR (cloud-optimized runtime)
核心 CLR 是精簡的完全模組化執行時。這個CLR已經被重新設計成元件便於你僅包含專案中實際使用的的.NET特性。元件作為NuGet 包新增。一旦完成引用,你的應用僅依賴於所需的功能。通過分解執行時為元件,我們可以更快的更改每個元件,因為每個元件都有自我更新機制。核心CLR只有11M大小,相對於200M的全功能CLR無疑將使應用更加輕便。核心CLR可以伴隨應用一起部署並且不同的核心CLR可以並行執行。
3. 跨平臺CLR
微軟將釋出針對於Linux 和 Mac OS X 釋出跨平臺執行時。這意味著你的.NET應用具備了在Mac 和Linux 裝置上執行的能力。微軟將和 Mono 社群合作完成這一新特性。在釋出之前,你可以使用Mono CLR用於跨平臺開發。
新建 Visual Studio 工程預設使用全功能 .NET CLR,可以在工程屬性頁面更改為核心CLR。
靈活的部署能力
ASP.NET 5 允許部署應用到 IIS,或脫離IIS進行獨立部署,當設定目標 Framework 為Core CLR時,即可以使用部署包中的依賴項來部署應用。因此,你的應用自成一體,再不依賴於全功能的.NET 版本。該應用可以在任何裝置和平臺中執行應用。
這對.NET平臺開發人員無疑又是個驚喜,部署應用不在侷限於IIS,當然微軟仍然推薦你使用IIS部署應用,但是如果需要在不相容IIS的平臺部署應用,你就可以使用該新特性進行操作。
後續文章中我們會發布如何建立不依賴於IIS 的MVC6應用,敬請期待。
多版本.NET並行使用
早期版本的.NET Framework,你將時刻面臨是否更新版本的選擇,一方面你希望使用更新的功能,另一方面你將為舊版本開發的工程是否可以平滑遷移到新版 .NET Framework 而感到糾結。
微軟在 ASP.NET 5中改善了以上問題。在使用核心CLR前提下,你可以在部署包內定義依賴關係,所以你可以為每個應用程式指定.NET版本。 舊版應用可以平滑執行,同時你也可以使用新版本開發應用。因此在ASP.NET 5中多個版本的.NET應用是並行的。
簡化依賴關係管理
ASP.NET 5 推出了一種全新的輕量級依賴關係管理機制。你不再需要在應用中新增引用,而是使用引用NuGet 包代替。你可以通過NuGet Package 管理器新增NuGet包,或者你可以編輯包含NuGet包列表和版本資訊 JSON 檔案(project.json)來實現引用。project.json 檔案用於列舉應用使用的 NuGet 相關資訊,如需新增其他引用,直接在該JSON檔案中新增即可。
合併MVC, Web API 和Web 頁
早期版本中, MVC、Web API 和Web 頁一直在使用著不同的方式實現著相同的功能,可以說是殊途同歸。例如, MVC 和Web API 都提供了路由,但是MVC routing 類在System.Web.Mvc.Routing 名稱空間中,而Web API 中類似的類在System.Web.Http.Routing 名稱空間中。再舉一個例子, Web 頁和 MVC 都是有Razor 語法, 但是仍然包含在相同功能的不同NuGet包中。
在 ASP.NET 5 中, MVC、Web API和and Web 頁將被整合到同一框架-MVC 6。這就意味著移除了重複功能模組,使開發應用變得更簡單。
在預覽版本中, MVC and Web API 首先被合併到MVC 6中。 Web 頁面將後在後續釋出版本中新增。
增強HTTP效能
ASP.NET 5 提供了一個精煉快速的HTTP 請求管道,該模組化管道允許你僅新增需要的元件,通過減輕管道開銷,應用將有更好的吞吐量。
雲部署能力
當你建立一個新的 ASP.NET 5 工程,這個工程預設就已經具備輕鬆部署到雲端的結構。Visual Studio 2015 提供了全新的環境配置系統代替了Web.config 檔案。新的系統允許使用多種檔案型別(例如JSON, XML, or 或環境變數)儲存鍵值對,因此你可以在任意環境中輕鬆指定值或獲取這些值。
同時,ASP.NET 5提供了檢測和跟蹤已部署雲應用問題的工具。
整合依賴注入
依賴注入被內建於ASP.NET 5中。你可以使用 IoC容器註冊依賴項。依賴關係的注入促進了正確服務環境的提供。
開源
ASP.NET原始碼已經發布到GitHub中。不僅僅提供了當前版本原始碼,微軟也承諾會同步更新GitHub中的原始碼,你可以及時檢視到ASP.NET 的變化,可以下載並且提交更改到GitHub上。
這有助於你瞭解ASP.NET 程式碼及技術走向,同時你可以定製自己的ASP.NET。
關於 Web Forms
微軟一直致力於提供給使用者新的功能去改善開發體驗,你仍舊可以開發Web Forms 應用,並且在Web Forms 4.6 新增了以下新特性:
- HTTP 2
- 非同步繫結模式
- Roslyn CodeDOM 編譯器
早期版本開發的 Web Forms 應用無需任何更改可以直接在 IIS .NET 4.6框架下執行。不過,無法使用ASP.NET 5 核心CLR新特性。
例如當前有使用Web Forms、 MVC 5、 Web API 2、SignalR 2、 Web Pages 3 或 Entity Framework 6 開發的應用,你僅需設定當前執行時版本為全功能執行時,無需做出任何程式碼級別修改即可在 ASP.NET 5中執行。 但是, 核心CRL是ASP.NET 5新特性,如果你希望應用具備該執行時的功能,那麼需要做出一定的修改。微軟提供 API Portability Analyzer 工具可以判斷當前應用是否可以使用核心CRL。這個工具還可以分析當前應用可以執行在哪些平臺,以及哪些因素阻止其不能在特定平臺上執行。同時也會提示所需要的更改以及使用哪些新增介面來替換。
MVC 6 和 SignalR 3 應用使用新的HTTP管道,所以它們無法與使用System.Web 介面的應用相容。如果需要升級已存在應用到MVC 6 或者 SignalR 3,你必須使用Visual Studio 2015 建立新工程,再匯入原有工程,匯入過程中需要修改不支援的程式碼片段。