以下中文翻譯如果有不明確的地方,建議以原文為準。圖片也來自原文網站。
如果您需要引用,請註明中文譯者:MIS2000 Lab.,並保留URL超連結到本文章

===================================================================================

ASP.NET 5 簡介(Introducing ASP.NET 5,原作ScottGu)
原作發表時間:2015/2/23
 
大約十五年前,ASP.NET 1.0的第一個預覽版(Preview)現身了。自此數百萬開發人員用它來建立與執行各種偉大的Web應用程式,經過這麼多年,我們在上面增加和進化很多很多的功能。
 我(原文作者ScottGu)很高興在2015/2/23這天發布最新的ASP.NET版本,名為ASP.NET 5。這個新版本是我們對ASP.NET作過最顯著的架構更新之一。在這次釋出的版本中,我們讓ASP.NET更精簡、模組化、跨平台與雲端的最佳化。本次的ASP.NET 5預覽版(Preview),您可以透過下載(http://go.microsoft.com/fwlink/?LinkId=521794)最新版Visual Stduio 2015 CTP來使用它。(譯者註解:2015/2/23為VS 2015 CTP 6)
 ASP.NET 5是一個開源(開放原始碼)的web framework,可以用來開發和執行在Windows、Linux和Mac不同作業系統上的新Web應用程式。它包括MVC 6 framework,當下也結合了MVC和Web API的功能到一個single web programming framework裡面。ASP.NET 5也將是SignalR 3的基礎,讓您可以加入即時的功能(real time functionality)到雲端的應用程式裡面。ASP.NET 5是建立在.NET Core runtime,但它也可以在完整的(full).NET framework上運作以達到最大的(向下)相容性。(譯者註解:.NET開放原始碼的專案列表,請看 http://www.dotnetfoundation.org/projects
 在ASP.NET 5之中,我們正在做一系列的架構變化,藉此讓core web framework更加精簡(舉例來說,您再也不需要用到System.Web.dll了)、更加模組化(幾乎所有功能都可以藉由NuGet模組最佳化您的應用程式)。ASP.NET 5讓您獲得下列改進:
  • 建構與執行在Windows、Mac和Linux上的跨平台ASP.NET
  • 基於.NET Core,支援了side-by-side的app versioning(譯者註解:.NET Core支援不同應用程式使用各自獨立的runtime,版本互不干擾)。
  • 新工具,讓新的Web開發更加簡化。
  • Single aligned web stack for Web UI和Web APIs。
  • 為雲端環境而建、即時可用的設定(Cloud-ready environment-based configuration)。
  • 整合了創建和使用的NuGet軟體套件。
  • 內建對於DI(dependency injection)的支援。
  • 可以在IIS上建構主機,或是在自己的程序上自訂Host(Ability to host on IIS or self-host in your own process)。
 ASP.NET終究會讓您覺得更熟悉,也更方便調校新一代的Web開發作業。
  
更具彈性、跨平台Runtime
 ASP.NET 5有兩種runtime環境,讓您在選擇應用程式的主機時更具彈性。這兩種runtime選擇如下: 
 .NET Core -- 一個新的、模組化、跨平台的runtime而且體積更小了。當您鎖定.NET Core您就可以用到許多令人興奮的優點:
1). 您可以部署「專屬的」.NET Core runtime在您的應用程式上,如此一來你的應用程式將會執行與部署在這套您「專屬的」runtime版本上,而不是跟主機上作業系統所安裝的那套runtime綁死在一起。您的runtime版本可對應不同的應用程式side-by-side地運作(譯者註解:不同應用程式的runtime可以各自獨立)。必要時,您可以更新runtime而不會影響到其他應用程式,或是說,您也可以繼續運作現有的版本,不會因為其他應用程式修改runtime而對您造成影響。如此一來,在同一系統(主機)上進行應用程式部屬、架構更新時,會更加簡單、更加單純而不會干擾到其他應用程式的運作。
 2). 您的應用程式只會用到自己需要的功能(譯者註解:用多少就裝多少)。因此,您永遠不會被系統提醒「該去更新那些您沒用到的runtime功能」了。從此再也不用曠日廢時地測試、部屬那些「跟自己應用程式無關」的系統更新。
 3). 您的應用程式現在可以跨平台運作。我們將提供Windows、Linux和Mac OS X系統上都能運作的跨平台.NET Core版本。無論使用哪種作業系統來開發或是部屬,您都可以使用.NET。雖然跨平台的.NET版本尚未發布,但我們正努力在GitHub上工作並且計畫早日提供正式的預覽版給大家。
 譯者註解:另一篇文章提到「當然這樣的改變,變成這些 app 用到的 framework 必須是為 .NET Core 來撰寫,所以不是所有現有的函式庫(尤其是社群或第三方開發)都能在 .NET Core 上運作,這會是一次生態系的大變革。」....詳見全文  http://blogs.msdn.com/b/msdntaiwan/archive/2015/02/04/net-core-clr.aspx
  
.NET Framewrok -- 上述.NET Core的API相較於完整版的.NET Framework,其功能較為受限(較少),因此您可能需要修改現行的應用程式才能用於.NET Core上頭。如果您不希望修改應用程式就能直接運作,也可以在”完整版”的.NET Framework上(4.5.2版或是後續新版)運行ASP.NET 5應用程式。如此一來,您就可以存取完整的.NET Framework APIs了,您現行的應用程式與函式庫不需任何修改就能直接在runtime上運作。 
譯者註解:您可以到這個網站,看看幾張圖片,就能理解上文提到 .NET Core 與 完整版(Fully)的差異
 
 MVC 6 -- 一個大一統的程式設計模組
 MVC、Web API與Web Pages提供了互補的功能,因此在開發一套解決方案時通常會共用(譯者註解:Web Pages是使用Razor語法撰寫的網頁程式,跟ASP.NET Web Form不同)。然而在先前的ASP.NET版本中,這些程式設計的框架(framework)各自實施,因此包含一些重複和不一致之處。在MVC 6裡面,我們合併這些模組到單一的程式設計模組裡面。現在,您可以創建一個單一的Web應用程式並用它處理Web UI與資料服務,而不需要調整程式設計裡面的框架(framework)差異。您更可以把一開始用Web Pages寫成的網站無縫地融入更強大的MVC應用程式裡面。
 您可以從同一個controller裡面傳回Razor view與content-negotiated data,並使用相同的MVC filter pipeline來實作。
 除了統合了現有的框架,我們還增加了新的功能讓Server端的Web開發更加簡化,例如增加了很多新的tag helper幫助大家撰寫程式、畫面。這些tag helper讓您在view畫面中使用HTML helper更加得心應手。
 以前可能要寫成這樣:
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
						@Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })
							@Html.TextBoxFor(m => m.UserName, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" })

			

現在可以改寫成這樣:

<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
    <label asp-for="UserName" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <input asp-for="UserName" class="form-control" />
        <span asp-validation-for="UserName" class="text-danger"></span>
    </div>
</div>
			
Tag Helper能讓您寫的view畫面更自然、可讀性更高。也可以用來自訂HTML helper的輸出,額外加入其他HTML編輯器的完整特性。
 想要瞭解更多建立MVC 6應用程式的範例,可以參閱 http://www.asp.net/vnext/overview/aspnet-vnext
 
 新的Web開發
 本次(2015/2/23)釋出的ASP.NET 5 預覽版也包含許多有趣的特點,讓您能夠建構更好的 Web應用程式:
 動態發展(Dynamic Development)
 在Visual Studio 2015裡面,我們從動態編譯的優點裡,企圖讓開發經驗更加流暢。您再也不用每次小改變時就得重新編譯一次,如下圖,只要:(1). 編輯程式碼,(2). 存檔,(3). 直接刷新(refresh)瀏覽器,(4). 就能自動看到您剛剛的修改成果。
 image

 盡情享受您的開發經驗吧!如同撰寫直譯式語法一般,卻能享有編譯式語法的優勢。

 您也可以選擇其他的程式碼編輯器來完成你的ASP.NET 5專案。Visual Studio使用者界面中的每一個功能都可以對應跨平台的命令行(Command-line)操作(譯者註解:也可以透過輸入指令碼來達成)。
  
與流行的Web開發工具整合(如Bower、Grunt與Gulp)
 另一個令人開心的功能是Visual Studio 2015本身即支援了Bower、Grunt與Gulp這些廣受歡迎的開放原始碼(開源)工具,我們認為應該將它們包含在開發工具裡面。
 Bower是一個用於用戶端(Client-side)的函式庫管理工具,包含了JavaScript與CSS函式庫。
  • Grunt與Gulp是task runner,用來協助您自動化Web開發流程。您可以使用他們來編譯LESS、CoffeeScript或TypeScript檔案,執行JSLint或是縮減JavaScript檔案。
 說明與展示如下: 
Bower:如下圖,您可以直接在bower.json檔案裡面加入一個JavaScript函式庫到ASP.NET專案裡面。

image

 提醒您,Visual Studio透過許多可用的軟體套件來增強「智慧選字(IntelliSense)」功能。下次當您打開一個方案,Visual Studio會自動還原您先前遺失的軟體套件,您就不用大費周章地檢查這些原始檔(資源檔)了。 

如果是Server端的軟體套件,您最好使用NuGet來幫忙。 
Grunt:現在的Web開發,您通常得自己管理一大堆task,只是為了建立自己的應用程式,例如:編譯LESS、TypeScript或CoffeeScript檔案、做lint、縮減JavaScript檔案、執行JS單元測試等等。每個開發團隊都有自己的需求並且依賴各自所需的工具來完成。Task runner讓這些管理與協同工作更加簡單。Visual Studio 2015支援了兩種最流行的task runner,就是Grunt與Gulp。
 例如,假設您想用Grunt編譯LESS文檔。只要到package.json裡面加入「grunt-contrib-less」軟體套件即可,它是一個第三方的Grunt plugin。關於grunt-contrib-less套件可以參閱https://github.com/gruntjs/grunt-contrib-less 。 

image

 如下圖,使用Visual Studio 2015裡面的Task Runner Explorer來綁定(繫結、bind)task的步驟如下:pre-build、post-build、clean或是在方案被打開的時候。

image

很輕易地就能在專案裡面將常用task給自動化,或是讓它們一起為您工作、以及用於跨團隊的專案之中。
  
Dependency Management的簡化 
在ASP.NET 5可以透過NuGet來管理專案所需各種軟體套件之間的相依性(dependency)。您可以用NuGet Package Manager或只需編輯JSON文檔(例如project.json)就能列出專案用上的所有NuGet軟體套件與版本。project.json文檔簡單好用,你可以用任何文字編輯器來處理,即使應用程序已被部署到雲端也可以輕鬆改動這些設定。
 project.json文檔如下: 
image

 如下圖,Visual Studio 2015智慧選字(IntelliSense)助您一臂之力,讓您迅速找到相關的NuGet軟體套件:

image

如下圖,智慧選字(IntelliSense)也幫您列出這些NuGet軟體套件的可用版本。

image

Cloud-ready(即時可上雲端)的設定
 在ASP.NET 5之中,我們不需再用Web.config文檔來進行設定。我們想讓應用程式部屬到雲端的步驟更加簡化,而且可以自動讀取到正確的環境設定值。新系統使您能夠從各種來源(如JSON、XML或環境變數)獲得這些已經命名的設定值。您可以自行決定哪些格式最適合當前的狀況。
 在Startup.cs文檔裡面,您現在可以新增或移除設定值。如下圖。
 image

上述的程式碼片段用來表示:一個專案從JSON文檔裡面取得設定值與環境變數。您可以輕易地定義其他來源,例如config.json文檔裡面的設定(如下圖)。

image

 在您的主機環境中,例如Windows Azure,在應用程式部屬之後可以設定環境變數與相關的設定值,用來取代本機上的預設值。不用擔心測試用的數值被部屬到(正式的)應用程式上。

  
Dependency injection(DI)
 現有的ASP.NET framework,例如:MVC、Web API與SignalR已經支援Dependency injection(DI),但不夠一致化也不是全面普及。ASP.NET 5提供了一個內建的的DI abstraction,可以一致地遍及整個Web Stack。您可以在啟動時存取服務、在中介軟體(middleware)、filter、controller、Model Binding的時候…..幾乎任何地方都可以透過管道(pipeline)的各種部分,虛擬地使用您的服務。ASP.NET 5包含一個簡約的DI容器來導入(bootstrap)系統,但您可以輕鬆地選擇想要的容器(例如:Autofac、Ninject等)來替換預設的DI容器。服務可以是單一的(singleton),也可用來作為要求(request)或是transient。。
 例如,下面的例子會讓您了解如何使用ASP.NET MVC 6的constructor injection去創建一個新的ASP.NET 5 Starter Web專案,並加入一個簡單的時間服務:
using System;
namespace WebApplication1
{
    public class TimeService
    {
        public TimeService()
        {
            Ticks = DateTime.Now.Ticks.ToString();
        }
        public String Ticks { get; set; }
    }
}
		

 當constructor被呼叫時,這個簡單服務類別(時間服務)被啟動並設定當前的Ticks。

 接下來,註冊這個時間服務為Startup類別裡面CoinfigurationServices方法的transient service。如下:
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddTransient();
}
			

 當TimeService物件被創建時,更新HomeController去使用constructor injection並且寫到Ticks。如下。

public class HomeController : Controller
{
    public TimeService TimeService { get; set; }
    public HomeController(TimeService timeService)
    {
        TimeService = timeService;
    }
    public IActionResult About()
    {
        ViewBag.Message = TimeService.Ticks + " From Controller";
        System.Threading.Thread.Sleep(1);
        return View();
    }
    // Code removed for brevity
}
			

 注意喔!Controller不會建立TimeService。只有當controller被實體化的時候才會被inject。

在MVC 6裡面,您可以使用[Activate]屬性(attribute)藉由屬性(property)inject services。不光是可以用[Activate]在controller上,也可以在filter與view元件上使用。這表示您可以簡化controller程式碼如下:

public class HomeController : Controller
{
    [Activate]
    public TimeService TimeService { get; set; }
    // Code removed for brevity
}
			

 藉由關鍵字@inject,MVC 6也支援Razor view裡面的DI。如下圖的程式碼,我們已經將時間服務,直接inject到view畫面裡並且定義一個TimeSvc屬性用來存取。

@using WebApplication23
@inject TimeService TimeSvc
<h3>@ViewBag.Message</h3>
<h3>
    @TimeSvc.Ticks From Razor
</h3>
		

當您執行這份應用程式時,可以看見controller與view有不同的(時間)tick值。如下圖。

image

 高速HTTP效能
 ASP.NET 5導入了一個新的、模組化的HTTP 要求管道(request pipeline),所以您可以只加入所需要的元件(而不用包山包海全部放進來)。這個管道也不再依賴System.Web。透過管道上耗能的減少,您的應用程式可以有更好的流量表現,也可以有更多調校後的HTPP stack。新管道的精簡化都源自Katana專案(http://katanaproject.codeplex.com/)與OWIN(http://owin.org/)的支援。
 想要自訂使用在管道內的元件,可以使用Startup類別的Configure方法。Configure方法可以用來定義您用在需求管道(request pipeline)裡面的中介軟體(middleware)。ASP.NET 5已經包含了很多源自Katana專案的中介軟體,例如middleware for static files、身份驗證與系統診斷。下圖展示了可在專案中的管道自行加入或是移除的特性:
public void Configure(IApplicationBuilder app)
{
    // Add static files to the request pipeline.
    app.UseStaticFiles();
    // Add cookie-based authentication to the request pipeline.
    app.UseIdentity();
    // Add MVC and routing to the request pipeline.
    app.UseMvc(routes =>
    {
    routes.MapRoute(
        name: "default",
        template: "{controller}/{action}/{id?}",
        defaults: new { controller = "Home", action = "Index" });
});
		

 您也可以寫自己專屬的中介軟體(middleware)元件並且加入管道之中。

  
開放原始碼(開放源碼)
 我們在GitHub上把ASP.NET 5當作一個開放原始碼的專案(https://github.com/aspnet/home)。您可以檢視這些程式碼、看看我們做了哪些異動、或是下載程式碼並提交您的修正。我們相信讓ASP.NET 5開源可以讓您更輕易地瞭解這些程式、瞭解我們的意向、並分享到專案裡面。
 
 文件與教程
 想要開始學習ASP.NET 5,您可以在ASP.NET官方網站找到文件與教學範例(http://www.asp.net/vnext)。以下是開啟您第一個ASP.NET 5專案的學習步驟:
  • Manage Client-Side Web Development in Visual Studio 2015, Using Grunt and Bower
 
  • View components and Inject in ASP.NET MVC 6
 
 ===================================================================================
  
 以下中文翻譯如果有不明確的地方,建議以原文為準。圖片也來自原文網站。
 如果您需要引用,請註明中文譯者:MIS2000 Lab.,並保留URL超連結到本文章
  

 這裡有一張圖片,我覺得講得很清楚。

如果把下圖左側的 ASP.NET 4.6改名為 Web Form 4.6或許更清楚了。

 

這份簡報的圖片也解釋得很清楚  http://www.slideshare.net/mbaric/introduction-to-a...

2015/3/18 微軟有提供影片介紹  http://channel9.msdn.com/Events/dotnetConf/2015/In... 

關於 ASP.NET 5 我另外翻譯一篇相關文章:

[中文翻譯] ASP.NET 5 概觀 (ASP.NET 5 Overview,原作 Tom FitzMacken 2014/11/12)

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

......... 寫信給我,mis2000lab (at) yahoo.com.台灣 .....................................................................................

................   facebook社團   https://www.facebook.com/mis2000lab   ............................

................   Google+   https://plus.google.com/100202398389206570368/posts ..............

................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ

創作者介紹

MIS2000 Lab -- ASP.NET專題實務 / 線上教學文件

MIS2000 Lab 發表在 痞客邦 PIXNET 留言(0) 人氣()