ASP.NET 5 概觀 (ASP.NET 5 Overview)

ASP.NET 5 概觀 ASP.NET 5 Overview

原文:ASP.NET 5 Overview 原作:Tom FitzMacken (2014/11/12)      
原譯者:MIS2000 Lab. (2014/12/10 : MSDN Taiwan 針對英文翻譯部份文字增修)

ASP.NET 5 簡介 

ASP.NET 5是一個精鍊的.NET堆疊(lean .NET Stock)用來建構現代化的網路應用程式。我們從最底層一步一步建構起來,並且提供各種應用程式一個最佳化的開發架構,您可以建構雲端的應用或是在本機上運行兩者都可。.NET Framework包含了各種最小耗能(minimal overhead)的模組化元件,讓您可以靈活地建構各式解決方案。 

ASP.NET 5包含下列特點:

l   全新的、彈性且跨平台的 runtime。

l   全新的、模組化的HTTP Request管線(pipeline)。

l   即時可用的雲端環境設定。

l   一致化的設計模組,包含MVC、Web API與Web Pages(譯者註解:這是使用 Razor 語法撰寫的網頁程式,跟 ASP.NET Web Form 不相同)。

l   不需重建專案就能看到前後版本的差異。

l   side-by-side .NET Framework 各版本。(Side-by-side versioning of the .NET Framework)

l   能在 IIS 或 self-host 上運作。(Ability to self-host or host on IIS)

l   Visual Studio 2015的全新工具。

l   GitHub上的開放原始碼。

我們為 ASP.NET 5所做的改變都是源自客戶的要求與回饋。這些改變都是為了讓網路應用程式的開發、主機部署(hosting、託管)與維護更加簡便。

您的舊版應用程式不需任何異動就可以在新版本ASP.NET上面運作。然而,想要用到ASP.NET 5新功能的優點,您將需要把既有的程式碼轉移到新的架構上。 你會發現 ASP.NET 5 和早先版本的 ASP.NET 之間有很多相似之處,所以程式碼轉移只需修正一些具體的議題,而不用全面改寫應用程式。

 
下載 Visual Studio 2015 Preview 

請由此下載 Visual Studio 2015 Preview(下載VS 2015預覽版),關於VS 2015的新功能可以參閱 此篇 

In this topic

 

為何重新設計ASP.NET

需要更彈性、跨平台的 runtime 

過去,.NET Framework是單一、兼容並蓄的(all-encompassing)完整安裝。隨著.NET的每一個版本的演進,功能只有新增卻很少刪除,因此該架構的容量不斷激增。這種做法確保了安裝.NET的每一台Windows主機可以支持所有類型的.NET應用程式,但它也意味著每個應用程式沿用了許多它未曾用到的功能。

如果一種.NET的技術需要重大更新,即使你並沒有直接使用這部分的.NET,您也會收到一個通知建議您進行更新。你必須決定是否要安裝此更新,過程中可能忍受中斷伺服器,或是您忽略這次更新,希望你忽略的部分恰巧沒用到。 

ASP.NET 5為您提供了更大的靈活性,能在下列三者中運作情境下執行:

1. 完整的 .NET CLR (Full .NET CLR)

完整的 .NET CLR 是 Visual Studio中預設運作的專案。它提供了整個 API 集合,是為了各種版本向下相容的最好選擇。

2. Core CLR (cloud-optimized runtime)

Core(核心)CLR是一個精鍊、完全模組的 runtime,用在 ASP.NET 5的專案上。這CLR已被重新設計成元件,以便您可彈性地包含你需要的部分在應用程式裡面。您可以透過NuGet添加元件。當你完成之後,你的應用程式只用到需要的功能即可(不必包山包海地納入全部功能)。通過重新分解runtime為各自單獨的元件,因為每個元件的更新可以有其自己的時程,我們可以更迅速地提供某些需要改進的元件(譯者註:個別更新,不需要等到全部改進後才發表)。如此一來,核心的Core CLR十分精簡,只有11MB大小,而不是完整的200MB .NET CLR。該核心CLR可以隨著您的應用程式進行部署,而不同版本的核心 CLR可以side-by-side地運作(這兩種優點在下面更詳細地描述)。

3.  跨平台 CLR (Cross-Platform CLR)

未來,我們將會發布跨平台的runtime在Linux和Mac OS X作業系統上。將來發佈時,這些版本的runtime將開發並在Mac和Linux設備上運行.NET應用程式。上述的跨平台CLR事宜,我們將與Mono社群緊密合作。待它發表時,您將可以使用Mono CLR作為跨平台開發。欲了解更多信息,請參閱 開發Mac上的 ASP.NET vNext 應用

預設的情況下,新的 Visual Studio 專案會使用完整的 .NET CLR。您也可以定義 Core CLR 在專案的設定屬性裡面(如下圖)。

 

無所不在的 Host 

ASP.NET 5 允許您可以部署應用程式在 IIS 或在你自己 process 中 self-host 上運作。當你鎖定(確認)Core CLR 以後,你可以為每一份即將部署的應用程式,綁定專屬的軟體套件。因此,您的應用程序和它所依賴的套件均是完全獨立(自給自足的,self-contained)的,不再依賴於系統既有(事先安裝好)的 .NET 版本。不久的將來,任何類型的設備或主機平台都能執行您的應用程式。 

這樣的新功能為您提供更多的自由。我們仍然建議IIS是主機的最佳選擇,但在某些情況下,你可能需要用到不同的主機平台。現在,您只需部署您的專案到該主機上頭。您的主機屬性不再綁死在開發的架構上面,反之亦然。 

如果想要更多的例子,可以參閱 Create a Web API in MVC 6

side-by-side 方式使用不同版本的 .NET Framework (Use different versions of .NET side-by-side)

當一台伺服器上的應用程式依賴於一個單一的、完整安裝的.NET Framework時,所有的應用程式必須執行同一版本的.NET才行。考慮是否要升級到新版.NET Framework時,可能造成你的不安。也許,你想讓一些應用程式使用最新的.NET版本,但你無法確定是否所有的舊版應用程式都可以跟新的.NET一起運作。

幸運的是,ASP.NET 5解決了這個問題。您可以自行定義「部署的軟體套件」內的相關性,所以你可以為「每個應用程式」定義它需要的.NET版本。你可以得到最新版應用程式帶來的好處,並可以輕易地讓某些應用程式搭配舊版本來執行。各種不同版本.NET可以side-by-side地運行而且沒有任何問題。要運行不同版本請您務必鎖定Core CLR。
 

簡化依存性( Simplify dependency management  

ASP.NET 5 引薦了一個新的、輕量化的方式來管理專案的依存性(dependency)。你不再需要在專案中個別「加入參考」(add assembly references),相反地只需要透過 NuGet 就能管理這些外掛的元件。您可以藉由的 NuGet Package Manager 添加的 NuGet 軟體套件,或者您可以編輯 JSON 文件(如 project.json 檔)來控管專案中使用的 NuGet 軟體套件與版本。要添加其他的外掛套件,只需輸入的 NuGet 套件名稱和版本編號到 project.json 檔案裡面即可(如下圖)。

 

在Visual Studio 2015中,IntelliSense 也能找到NuGet軟體套件的關鍵字,如下圖。

 

前述的project.json檔案只包含您想加入專案中的NuGet套件。如果添加的NuGet套件跟其他軟體套件互相依賴(彼此相關),這些相關的套件也會被載入,但不會列在project.json檔裡面。這種作法讓你的project.json檔更簡潔、也更易於管理。如果你從project.json檔移除了某幾個NuGet套件,與其相關套件也會被刪除,前提是:如果沒有其他的套件也引用到它們。

即使你沒有安裝Visual Studio,(上述的)JSON格式也能讓您更輕鬆地管理軟體套件(外掛)之間的依存關係。你可以在任何一種文字編輯器打開project.json文件並進行修改; 如更新部署到雲端中的應用程式,他們的軟體套件依存關係。 

消除 MVC Web API Web Pages 之間的重複 

過去的 MVC、Web API 與 Web Pages 有許多重疊的特性,但這些功能的實作卻是各自獨立的(譯者註解:Web Pages 是使用 Razor 語法撰寫的網頁程式,跟 ASP.NET Web Form 不相同)。例如,MVC 和 Web API 均提供路由(routing)的功能,但 MVC 路由的類別卻放在 System.Web.Mvc.Routing 命名空間裡,而Web API的卻放在在 System.Web.Http.Routing 命名空間內。 或者,Web Pages 和 MVC皆使用 Razor 的語法,但有些 NuGet 套件分別只相容(MVC 或 Web Pages)其中一種。 

在 ASP.NET 5,MVC、Web API 和 Web Pages 將被合併成一個.單一架構,名為 MVC 6。這樣的合併消除了重複的架構,使您更輕鬆地開發使用這些程式架構框架的應用程式。你不需要為了是否在 MVC,Web API 或 Web Pages 前後文關係中,再去撰寫類似的程式碼了。在 VS 2015 預覽版裡面,MVC 與 Web API 已經在 MVC 6 統一了。Web Pages 將會再下一個 MVC 6 的釋出版本中加入。  

改善HTTP效能 

ASP.NET 5引入了一個新的HTTP Request管道(pipeline)是精簡和快速。這條管道是模組化的,所以你可以只添加您需要的組件即可。透過減少管道的消耗,你的應用程式將體驗到更好的傳輸量(throughput)。新管道也支持 OWIN

雲端立即可用 

當你新建一個ASP.NET 5專案,此專案的先天結構就是部署到雲端環境而生。 Visual Studio 2015提供了一個全新的環境設定系統,它取代了既有的Web.config檔。新系統讓您能夠從各種來源(如JSON,XML,或環境變數)要求(索取)已命名的值。你為每個環境指定的值,或是在部署以後能讓您的應用程式只需讀取正確的值。 

我們還提供診斷和追蹤工具,使你更容易地發現在雲端裡面的應用程式問題。

整合 dependency injection

Dependency injection(DI)也是內建在ASP.NET 5的功能,您可以使用Inversionof Control(IoC)容器來註冊這些依存性。Dependency injection(DI)有利於對環境提供正確的服務。欲了解更多信息,請參見Dependency Injection in ASP.NET vNext。 

開放原始碼與透明 

所有的ASP.NET 5的程式碼都放到 GitHub上面了。不僅是程式碼可用,而且GitHub repositories也融入我們的開發之中。你可以清楚地看到 .NET 進行了哪些更改,每次變更以後,您可以下載程式碼並把修正後的結果提交上來。

在 GitHub 上開發 ASP.NET 5,我們讓您更容易理解程式碼,了解我們的預期方向發展,有助於增強和建置您想要客制化的 ASP.NET 功能。

更靈活的開發環境 

Visual Studio 2015 為 ASP.NET 應用程式提供了一個輕量級的開發者經驗。您只需改變你的程式碼、存檔、然後刷新瀏覽器畫面(如下圖)。就可以看到在 Web 瀏覽器的修改成果,而無需重新建置(re-build)專案。

 

如上圖,倘若你改變的程式碼是在Web專案中、或是在您的專案中引用的類別庫裡面。你還是得執行(CTRL + F5)專案,而不是在debug模式下看到這些動態地的變化。 

Visual Studio使用 羅斯林(Roslyn)編譯器 啟動了這個動態的編譯。你仍擁有所有編譯架構的結構和權力,但開發經驗感覺更像是一種直譯型(Interpreted)語言。

Visual Studio使用者介面(UI)中的每一個功能都可以對應命令行(command-line)的操作。您可以在使用者介面和編寫command-line script之間輕鬆轉換。 

最後,您可以使用其他的程式碼編輯器來完成你的 ASP.NET 5 專案。
 

關於 Web Form 支援及改進

您可以繼續開發Web Form應用程式,並有信心Web Form是.NET的Web開發平台的重要組成部分。我們將繼續致力於增加新功能,以Web Form提高開發經驗和保持最新網路實務的技術。 

Web Form 4.6包括 WebForm 以下新的特點:

l   HTTP 2

l   非同步步模型綁定(Async. Model Binding)

l   羅斯林(Roslyn)CodeDOM 的編譯器 

您既有的 Web Form 應用程式將繼續地運作,在不變更在 IIS 的情況下以 .NET 4.6 執行。但是您不能使用 Web Form 應用程式在 cloud-optimized(針對雲端最佳化的)runtime 上面。有關新功能的 Web Form 4.6,請參閱 Web Forms 4.6。有關Web Form在Visual Studio 2013 Update2近期變化的資訊,請參閱 Improvements to ASP.NET Web Forms。 

以前的應用程式呢?  

你可能會擔心隨著ASP.NET 5的版本編號不斷改變,讓你需要重新編寫所有的應用程式。別擔心!你在早期版本建立的ASP.NET應用程式將繼續與新的.NET架構一起運作。如果你不需要用到ASP.NET 5的新功能,你並不需要更新或重新部屬(安裝)這些應用程式。 

例如,你的應用程式,目前使用Web Form、MVC 5、Web API 2、SignalR 2、Web Pages 3或Entity Framework 6,都可以在完全不經修改的情況下,完整獲得新架構支援。但是,你很可能需要使用「完整的.NET CLR」來執行這些舊版本的應用程式,因為只有這個(完整版)CLR 提供與早期版本完全相容。 

在cloud-optimized(針對雲端最佳化的)runtime 上面提供了很多限制型的 API 的介面。使用 cloud-optimized runtime 時,應用程式必須只使用這個 runtime 專用的類型和成員。

想知道你的應用程序可不可以在 cloud-optimized runtime 執行嗎?請使用 API Portability Analyzer 工具來偵測一下。此工具會告訴你哪個平台上的應用程式可以針對並避免應用程式移動到另一個平台時會產生的相依性。它可以幫助你了解需要改變的範圍,並提出新的類型或成員代替那些已經不被支援的軟體套件。 

MVC 6 和 SignalR 3 的應用程式使用新的 HTTP pipeline,所以它們不與相容於使用 System.Web 的應用程式。要升級現有的應用程式到 MVC 6 或 SignalR 3,您必須透過 Visual Studio 2015 新建一個新專案,然後你的程式碼移植到新專案裡面。移動到新版本時,可能需要修改一些已經不支援的程式碼。 

看完本文之後,您可以繼續參閱以下內容:

 Next steps

The following videos (影片介紹)describe the latest enhancements: