这是我的文章备份 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 5 简介(Introducing ASP.NET 5,原作ScottGu 2015/2/23)的更多相关文章

  1. 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章  ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...

  2. 《Entity Framework 6 Recipes》中文翻译系列 (21) -----第四章 ASP.NET MVC中使用实体框架之在页面中创建查询和使用ASP.NET URL路由过虑

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 4.2. 构建一个搜索查询 搜索数据是几乎所有应用的一个基本功能.它一般是动态的,因 ...

  3. ASP.NET 5简介

    ASP.NET 5简介 解读ASP.NET 5 & MVC6系列(1):ASP.NET 5简介 2015-05-13 09:14 by 汤姆大叔, 3379 阅读, 39 评论, 收藏, 编辑 ...

  4. 《Entity Framework 6 Recipes》中文翻译系列 目录篇 -持续更新

    为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...

  5. 《Entity Framework 6 Recipes》中文翻译 ---- 系列教程

    为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...

  6. [翻译] ASP.NET Core 简介

    ASP.NET Core 简介 原文地址:Introduction to ASP.NET Core         译文地址:asp.net core 简介           翻译:ganqiyin ...

  7. Introducing ASP.NET vNext and MVC 6

    [译]Introducing ASP.NET vNext and MVC 6 原文:http://www.infoq.com/news/2014/05/ASP.NET-vNext?utm_source ...

  8. 酷学习笔记——ASP.NET Core 简介

    ASP.NET Core 简介 其实就是说酷好,不好好学,不学好,没饭吃. 新词汇:IoT,Internet of Things,网联网,微软物联网英文网站.微软物联网中文网站

  9. 解读ASP.NET 5 & MVC6系列(1):ASP.NET 5简介

    ASP.NET 5简介 ASP.NET 5是一个跨时代的改写,所有的功能和模块都进行了独立拆分,做到了彻底解耦.为了这些改写,微软也是蛮 拼的,几乎把.NET Framwrok全部改写了一遍,形成了一 ...

随机推荐

  1. Redis使用的相关问题

    Redis用那些数据结构? 字符串类型String 字典Hash 列表List 集合Set 有序集合SortedSet HyperLogLog.Geo.Pub/Sub Redis Module.Blo ...

  2. CentOS 下部署Nginx+Gunicorn+Supervisor部署Flask项目

    原本之前有一部分东西是在Windows Server,但是由于Gunicorn不支持Windows部署起来颇为麻烦.最近转战CentOS,折腾一段时间,终于简单部署成功.CentOS新手,作为一个总结 ...

  3. ASP.NET Core 3.0 自动挡换手动挡:在 Middleware 中执行 Controller Action

    最近由于发现奇怪的 System.Data.SqlClient 性能问题(详见之前的博文),被迫提前了向 .NET Core 3.0 的升级工作(3.0 Preview 5 中问题已被修复).郁闷的是 ...

  4. python_文件目录的操作

    Python文件的主要操作 主要包括: 1,创建一个文件 2,删除一个文件 3,创建一个目录 4,删除一个目录 5,拷贝,重命名,查看文件大小 6,列出某个目录下文件的数量 7,递归打印某个目录下的所 ...

  5. 阿里云ECS 自己搭建 hyperledger fabric的错误

    常常有在本地搭建没问题,到阿里云上跑的时候 fabric启动不成功的问题. 引用: https://yq.aliyun.com/articles/238940 解决方案 1.在e2e_cli 下有个d ...

  6. vector详解

    /*vector向量容器*/ //用数组方式访问vector元素 #include<iostream> #include<vector> #include<cstdio& ...

  7. python 之 函数 内置函数

    5.15 内置函数 方法 含义 备注 abs(-1) 求绝对值 1 all ([1,'a',True]) 列表中所有元素的布尔值为真,最终结果才为真 True all ('') 传给all的可迭代对象 ...

  8. C 语言实例 - 判断数字为几位数

    C 语言实例 - 判断数字为几位数 用户输入数字,判断该数字是几位数. 实例 #include <stdio.h> int main() { long long n; ; printf(& ...

  9. ES6入门教程---数值扩展和数组扩展

    1.数值扩展 var num = 0b11; console.log(num);3 var num = 0o11;console.log(num);9 var num = 1.234; console ...

  10. 图片旋转js代码

    function rotateImage(imgId) { imageToRotate = document.getElementById(imgId); imageToRotate.style.fi ...