[中文翻译] ASP.NET 5 简介(Introducing ASP.NET 5,原作ScottGu 2015/2/23)

这是我的文章备份 http://www.dotblogs.com.tw/mis2000lab/archive/2015/03/11/aspnet_5_introduce_scottgu_20150223.aspx

 

原文出处:http://weblogs.asp.net/scottgu/introducing-asp-net-5

 

以下中文翻译如果有不明确的地方,建议以原文为准。图片也来自原文网站。

 

如果您需要引用,请注明中文译者:MIS2000 Lab.,并保留URL超链接到本文章

http://www.dotblogs.com.tw/mis2000lab/archive/2015/03/11/aspnet_5_introduce_scottgu_20150223.aspx

 

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

 

 

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,可以用来开发和执行在WindowsLinuxMac不同操作系统上的新Web应用程序。它包括MVC 6 framework,当下也结合了MVCWeb 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 CoreAPI相较于完整版的.NET Framework,其功能较为受限(较少),因此您可能需要修改现行的应用程序才能用于.NET Core上头。如果您不希望修改应用程序就能直接运作,也可以在”完整版”的.NET Framework上(4.5.2版或是后续新版)运行ASP.NET 5应用程序。如此一来,您就可以存取完整的.NET Framework APIs了,您现行的应用程序与函式库不需任何修改就能直接在runtime上运作。

 

 

译者批注:您可以到这个网站,看看几张图片,就能理解上文提到 .NET Core 完整版(Fully)的差异

http://blogs.msdn.com/b/bethmassi/archive/2015/02/25/understanding-net-2015.aspx

 

 

 

 

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更加得心应手。

 

以前可能要写成这样:

1

@Html.ValidationSummary(true, "", new { @class = "text-danger" })

2

 

 

3

                 

4

                        @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })

 

5

                 

6

                            @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" })

 

现在可以改写成这样:

1

<div asp-validation-summary="ModelOnly" class="text-danger"></div>

2

<div class="form-group">

 

3

    <label asp-for="UserName" class="col-md-2 control-label"></label>

4

    <div class="col-md-10">

 

5

        <input asp-for="UserName" class="form-control" />

6

        <span asp-validation-for="UserName" class="text-danger"></span>

 

7

    </div>

8

</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). 就能自动看到您刚刚的修改成果。

 

 

尽情享受您的开发经验吧!如同撰写直译式语法一般,却能享有编译式语法的优势。

 

您也可以选择其他的程序代码编辑器来完成你的ASP.NET 5专案。Visual Studio用户界面中的每一个功能都可以对应跨平台的命令行(Command-line)操作(译者批注:也可以透过输入脚本来达成)。

 

 

与流行的Web开发工具整合(如BowerGruntGulp

 

另一个令人开心的功能是Visual Studio 2015本身即支持了Bower、Grunt与Gulp这些广受欢迎的开放原始码(开源)工具,我们认为应该将它们包含在开发工具里面。

 

  • Bower是一个用于客户端(Client-side)的函式库管理工具,包含了JavaScript与CSS函式库。
  • GruntGulp是task runner,用来协助您自动化Web开发流程。您可以使用他们来编译LESS、CoffeeScript或TypeScript档案,执行JSLint或是缩减JavaScript档案。

 

说明与展示如下:

 

Bower如下图,您可以直接在bower.json档案里面加入一个JavaScript函式库到ASP.NET项目里面。

 

 

 

提醒您,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 。

 

 

 

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

 

很轻易地就能在项目里面将常用task给自动化,或是让它们一起为您工作、以及用于跨团队的项目之中。

 

 

Dependency Management的简化

 

在ASP.NET 5可以透过NuGet来管理项目所需各种软件套件之间的相依性(dependency)。您可以用NuGet Package Manager或只需编辑JSON文檔(例如project.json)就能列出项目用上的所有NuGet软件套件与版本。project.json文档简单好用,你可以用任何文本编辑器来处理,即使应用程序已被部署到云端也可以轻松改动这些设定。

 

project.json文檔如下:

 

 

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

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

 

Cloud-ready(实时可上云端)的设定

 

在ASP.NET 5之中,我们不需再用Web.config文档来进行设定。我们想让应用程序部属到云端的步骤更加简化,而且可以自动读取到正确的环境设定值。新系统使您能够从各种来源(如JSON、XML或环境变量)获得这些已经命名的设定值。您可以自行决定哪些格式最适合当前的状况。

 

在Startup.cs文档里面,您现在可以新增或移除设定值。如下图。

 

 

上述的代码段用来表示:一个项目从JSON文档里面取得设定值与环境变量。您可以轻易地定义其他来源,例如config.json文档里面的设定(如下图)。

 

在您的主机环境中,例如Windows Azure,在应用程序部属之后可以设定环境变量与相关的设定值,用来取代本机上的默认值。不用担心测试用的数值被部属到(正式的)应用程序上。

 

 

Dependency injectionDI

 

 

现有的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项目,并加入一个简单的时间服务:

 

01

using System;

02

  

 

03

namespace WebApplication1

04

{

 

05

    public class TimeService

06

    {

 

07

        public TimeService()

08

        {

 

09

            Ticks = DateTime.Now.Ticks.ToString();

10

        }

 

11

        public String Ticks { get; set; }

12

    }

 

13

}

 

当constructor被呼叫时,这个简单服务类别(时间服务)被启动并设定当前的Ticks。

 

接下来,注册这个时间服务为Startup类别里面CoinfigurationServices方法的transient service。如下:

 

1

public void ConfigureServices(IServiceCollection services)

2

{

 

3

    services.AddMvc();

4

    services.AddTransient<timeservice>();

 

5

}</timeservice>

 

当TimeService对象被创建时,更新HomeController去使用constructor injection并且写到Ticks。如下。

01

public class HomeController : Controller

02

{

 

03

    public TimeService TimeService { get; set; }

04

  

 

05

    public HomeController(TimeService timeService)

06

    {

 

07

        TimeService = timeService;

08

    }

 

09

  

10

    public IActionResult About()

 

11

    {

12

        ViewBag.Message = TimeService.Ticks + " From Controller";

 

13

        System.Threading.Thread.Sleep(1);

14

        return View();

 

15

    }

16

  

 

17

    // Code removed for brevity

18

}

 

注意喔!Controller不会建立TimeService。只有当controller被实体化的时候才会被inject。

在MVC 6里面,您可以使用[Activate]属性(attribute)藉由属性(property)inject services。不光是可以用[Activate]在controller上,也可以在filter与view组件上使用。这表示您可以简化controller程序代码如下:

1

public class HomeController : Controller

2

{

 

3

    [Activate]

4

    public TimeService TimeService { get; set; }

 

5

  

6

    // Code removed for brevity

 

7

}

 

藉由关键词@inject,MVC 6也支持Razor view里面的DI。如下图的程序代码,我们已经将时间服务,直接inject到view画面里并且定义一个TimeSvc属性用来存取。

 

1

@using WebApplication23

2

@inject TimeService TimeSvc

 

3

  

4

<h3>@ViewBag.Message</h3>

 

5

  

6

<h3>

 

7

    @TimeSvc.Ticks From Razor

8

</h3>

 

当您执行这份应用程序时,可以看见controller与view有不同的(时间)tick值。如下图。

 

 

高速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、身份验证与系统诊断。下图展示了可在项目中的管道自行加入或是移除的特性:

 

01

public void Configure(IApplicationBuilder app)

02

{

 

03

    // Add static files to the request pipeline.

04

    app.UseStaticFiles();

 

05

  

06

    // Add cookie-based authentication to the request pipeline.

 

07

    app.UseIdentity();

08

  

 

09

    // Add MVC and routing to the request pipeline.

10

    app.UseMvc(routes =>

 

11

    {

12

    routes.MapRoute(

 

13

        name: "default",

14

        template: "{controller}/{action}/{id?}",

 

15

        defaults: new { controller = "Home", action = "Index" });

16

  

 

17

});

 

您也可以写自己专属的中间件(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

http://www.asp.net/vnext/overview/aspnet-vnext/grunt-and-bower-in-visual-studio-2015 

 

  • View components and Inject in ASP.NET MVC 6

http://www.asp.net/vnext/overview/aspnet-vnext/vc 

 

这篇文章也非常有帮助,请看http://blogs.msdn.com/b/webdev/archive/2015/02/23/aspnet-5-updates-for-feb-2015.aspx 。

 

 

 

 

 

 

这是我的文章备份 http://www.dotblogs.com.tw/mis2000lab/archive/2015/03/11/aspnet_5_introduce_scottgu_20150223.aspx

你可能感兴趣的:(asp.net)