http://www.asp.net/vnext/overview/aspnet-vnext/aspnet-5-overview
ASP.NET 5概观(ASP.NET 5 Overview)
原作:Tom FitzMacken (2014/11/12)
译者:MIS2000 Lab. (www.dotblogs.com.tw/mis2000lab/)
ASP.NET 5简介
ASP.NET 5是一个精炼的.NET堆栈(lean .NET Stock)用来建构现代化的网络应用程序。我们从最底层一步一步建构起来,并且提供各种应用程序一个优化的开发架构,您可以建构云端的应用或是在本机上运行两者都可。.NET Framework包含了各种最小耗能(minimal overhead)的模块化组件,让您可以灵活地建构各式解决方案。
ASP.NET 5包含下列特点:
- 全新的、弹性且跨平台的运行时(runtime)。
- 全新的、模块化的HTTP Request管道(pipeline)。
- 实时可用的云端环境设定。
- 一致化的设计模块,包含MVC、Web API与Web Pages(译者批注:这是使用Razor语法撰写的网页程序,跟ASP.NET Web Form不相同)。
- 不需重建项目就能看到前后版本的差异。
- 完整对应(side-by-side).NET Framework各版本。
- 能在IIS或自建的主机(self-host)上运作。
- Visual Studio 2015的全新工具。
- GitHub上的开放原始码(源码)。
我们为ASP.NET 5所做的改变都是源自客户的要求与回馈。这些改变都是为了让网络应用程序的开发、托管(hosting)与维护更加简便。
您的旧版应用程序不需任何异动就可以在新版本ASP.NET上面运作。然而,想要用到ASP.NET 5新功能的优点,您将需要把既有的程序代码转移到新的架构上。 你会发现ASP.NET 5和早先版本的ASP.NET之间有很多相似之处,所以程序代码转移只需修正一些具体的议题,而不用全面改写应用程序。
下载Visual Studio 2015 Preview
请由此下载Visual Studio 2015 Preview(http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs 下载VS 2015预览版),关于VS 2015的新功能可以参阅 http://www.visualstudio.com/en-us/news/vs2015-preview-vs
为何重新设计ASP.NET?
需要更弹性、跨平台的运作
过去,.NET Framework是单一、兼容并蓄的(all-encompassing)完全安装。随着.NET的每一个版本的演进,功能只有新增却很少删除,因此该架构的容量不断激增。这种做法确保了安装.NET的每一台Windows主机可以支持所有类型的.NET应用程序,但它也意味着每个应用程序沿用了许多它未曾用到的功能。
如果一种.NET的技术需要重大更新,即使你并没有直接使用这部分的.NET,您也会收到一个通知建议您进行更新。你必须决定是否要安装此更新,过程中可能忍受中断服务器,或是您忽略这次更新,希望你忽略的部分恰巧没用到。
ASP.NET 5为您提供了更大的灵活性,能在下列三者中运作情境下执行:
1. 完整的.NET CLR
完整的.NET CLR是Visual Studio中预设运作的专案。它提供了整个API集合,是为了各种版本向下兼容的最好选择。
2. Core CLR(云端优化的运行时)
Core(核心)CLR是一个精炼、完全模块的运行时(runtime),用在ASP.NET 5的专案上。这CLR已被重新设计成组件,以便您可弹性地包含你需要的部分在应用程序里面。您可以透过NuGet添加组件。当你完成之后,你的应用程序只用到需要的功能即可(不必包山包海地纳入全部功能)。通过重新分解runtime为各自单独的组件,因为每个组件的更新可以有其自己的时程,我们可以更迅速地提供某些需要改进的组件(译者注:个别更新,不需要等到全部改进后才发表)。如此一来,核心的Core CLR十分精简,只有11MB大小,而不是完整的200MB .NET CLR。该核心CLR可以随着您的应用程序进行部署,而不同版本的核心 CLR可以side-by-side地运作(这两种优点在下面更详细地描述)。
3. 跨平台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或自己的主机(self-host)上面运作。当你锁定(确认)Core CLR以后,你可以为每一份即将部属的应用程序,绑定专属的软件套件。因此,您的应用程序和它所依赖的套件均是完全独立(自给自足的,self-contained)的,不再依赖于系统既有(事先安装好)的.NET版本。不久的将来,任何类型的设备或主机平台都能执行您的应用程序。
这样的新功能为您提供更多的*。我们仍然建议IIS是主机的最佳选择,但在某些情况下,你可能需要用到不同的主机平台。现在,您只需部署您的项目到该主机上头。您的主机属性不再绑死在开发的架构上面,反之亦然。
如果想要更多的例子,可以参阅 Create a Web API in MVC 6。
完整对应(side-by-side)不同版本的.NET Framework
当一台服务器上的应用程序依赖于一个单一的、完全安装的.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文件并进行修改(译者批注:不安装Visual Studio也能修改这些基础配置文件); 如更新部署到云端中的应用程序,他们的软件套件依存关系。
消除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提供了一个全新的环境设定系统(译者批注:需使用VS 2015的「项目(WebApplication)」,并挑选「ASP.NET 5」才行),它取代了既有的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包括Web Form以下新的特点:
- HTTP 2(譯者註解:詳見 http://zh.wikipedia.org/wiki/HTTP/2 影片可選中文字幕。此功能會在Windows 10的 IE瀏覽器與Web Form 4.6開始支援)
- 异步模型绑定(Async. Model Binding)(譯者註解:關於 ASP.NET 4.5起的 非同步& Model Binding,本站均有相關範例)
- 羅斯林(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
- Create a Web API in MVC 6
- View components and Inject in ASP.NET MVC 6
- Develop ASP.NET vNext applications on a Mac
- Entity Framework 7
- Visual Studio 2015 Preview Release notes
- Announcing ASP.NET features in Visual Studio 2015 Preview and VS2013 Update 4
The following videos (影片介绍)describe the latest enhancements:
- ASP.NET 5
- ASP.NET 5 for .NET Framework and .NET Core
- Web Forms 4.6
- ASP.NET Tooling in VS 2015
- Responsive Web Design
- Modern Web Tooling
http://www.asp.net/vnext/overview/aspnet-vnext/aspnet-5-overview
ASP.NET 5概观(ASP.NET 5 Overview)
原作:Tom FitzMacken (2014/11/12)
译者:MIS2000 Lab. (www.dotblogs.com.tw/mis2000lab/)