ASP.NET 5系列教程 (一):领读新特性
近期微软发布了ASP.NET 5.0,本次发布的新特性需求源于大量用户的反馈和需求,例如灵活的跨平台运行时和自主部署能力使ASP.NET应用不再受限于IIS、Cloud-ready环境配置降低了云端部署的门槛,另外源码开放无疑也是一个重量级惊喜。这些更改会有助于创建易于开发、部署、维护和现代的Web应用程序。相信看到以上几点作为.NET程序员的你已经迫不及待体验ASP.NET 5 的新功能了,下面我们就来看下这些新特性。
ASP.NET 5 是用于创建Web应用的框架,相对于以前的版本它更加简练、灵活,本次发布的版本彻底优化了应用开发框架,你可以轻松部署应用到云端或其他平台,它包含了最小的模块化组件,所以确保你在构建复杂解决方案的同时保持灵活性。
ASP.NET 5 包含以下特性:
·灵活的跨平台运行时
·新的HTTP模块请求管道
·Cloud-ready环境配置
·统一了包含 MVC、 Web API 和 Web 页面的编程模型
·无需重新编译即可查看更改效果
·并行的.NET Framework 版本
·自主部署或IIS部署能力
·内嵌于Visual Studio 2015中的新工具
·GitHub开放源码
使用旧版本开发的应用程序不需要做任何修改,即可直接在 ASP.NET 5上运行。然而,如需使用ASP.NET 5 新功能,你需要将现有代码移植到新的框架。ASP.NET 5 和早期 ASP.NET 版本基本相同,因此你只需要把精力集中到新功能开发上,节省了你的代码迁移时间。
以上概括性的介绍了ASP.NET 5的新特性和增强功能。
本篇文章中我们将重点阐述以下几点:
- 为什么重新设计ASP.NET ?
- 灵活的跨平台运行时需求
- 灵活的部署环境
- 多Framework版本并行使用
- 简化依赖关系管理
- 合并MVC、 Web API 和 Web 页
- 增强HTTP性能
- Cloud-ready 部署能力
- 集成依赖注入
- 开源
- 提供敏捷的开发环境
- 关于Web Forms
- 早期版本Framework开发应用兼容性
为什么重新设计 ASP.NET?
灵活的跨平台运行时需求
早期 .NET Framework 版本一直作为单一且全面的整体进行安装,每个新版本都包含了新功能和几乎所有早期功能,而鲜有删减,这就不可避免的造成Framework的体积的增长。这种模式确保了安装了新版 Framework的Windows系统可以兼容所有早期版本的.NET 应用,但是也意味着每个应用都将运行在一个庞大冗余的框架上,即使很多功能在实际项目中没有使用。
相信每位.NET程序员都遇到过以下尴尬的决策场景:当收到Framework有更新发布时的通知时,是放弃使用新增功能保持应用的灵活性还是使用新特性而忍痛让你的Framework更加庞大!
为了应对以上场景。ASP.NET 5提供了三种运行时,你可以根据实际需要灵活选择:
1. 全功能.NET CLR
全功能.NET CLR 是Visual Studio工程默认运行时状态。它提供所有 API,是保持应用向下兼容性最佳选择。
2. 核心CLR (cloud-optimized runtime)
核心 CLR 是精简的完全模块化运行时。这个CLR已经被重新设计成组件便于你仅包含项目中实际使用的的.NET特性。组件作为NuGet 包添加。一旦完成引用,你的应用仅依赖于所需的功能。通过分解运行时为组件,我们可以更快的更改每个组件,因为每个组件都有自我更新机制。核心CLR只有11M大小,相对于200M的全功能CLR无疑将使应用更加轻便。核心CLR可以伴随应用一起部署并且不同的核心CLR可以并行运行。
3. 跨平台CLR
微软将发布针对于Linux 和 Mac OS X 发布跨平台运行时。这意味着你的.NET应用具备了在Mac 和Linux 设备上运行的能力。微软将和 Mono 社区合作完成这一新特性。在发布之前,你可以使用Mono CLR用于跨平台开发。
新建 Visual Studio 工程默认使用全功能 .NET CLR,可以在工程属性页面更改为核心CLR。
灵活的部署能力
ASP.NET 5 允许部署应用到 IIS,或脱离IIS进行独立部署,当设置目标 Framework 为Core CLR时,即可以使用部署包中的依赖项来部署应用。因此,你的应用自成一体,再不依赖于全功能的.NET 版本。该应用可以在任何设备和平台中运行应用。
这对.NET平台开发人员无疑又是个惊喜,部署应用不在局限于IIS,当然微软仍然推荐你使用IIS部署应用,但是如果需要在不兼容IIS的平台部署应用,你就可以使用该新特性进行操作。
后续文章中我们会发布如何创建不依赖于IIS 的MVC6应用,敬请期待。
多版本.NET并行使用
早期版本的.NET Framework,你将时刻面临是否更新版本的选择,一方面你希望使用更新的功能,另一方面你将为旧版本开发的工程是否可以平滑迁移到新版 .NET Framework 而感到纠结。
微软在 ASP.NET 5中改善了以上问题。在使用核心CLR前提下,你可以在部署包内定义依赖关系,所以你可以为每个应用程序指定.NET版本。 旧版应用可以平滑运行,同时你也可以使用新版本开发应用。因此在ASP.NET 5中多个版本的.NET应用是并行的。
简化依赖关系管理
ASP.NET 5 推出了一种全新的轻量级依赖关系管理机制。你不再需要在应用中添加引用,而是使用引用NuGet 包代替。你可以通过NuGet Package 管理器添加NuGet包,或者你可以编辑包含NuGet包列表和版本信息 JSON 文件(project.json)来实现引用。project.json 文件用于列举应用使用的 NuGet 相关信息,如需添加其他引用,直接在该JSON文件中添加即可。
在 Visual Studio 2015中,根据智能提示可以快速的添加NuGet 包。
project.json 文件仅包含直接添加到工程中的 NuGet 包。如果添加引用文件外的包,这类依赖项将仅仅被加载,而不会显示到project.json 文件中。这种机制可以使project.json 文件轻便易管理。
JSON格式文件使你可以在没有安装Visual Studio情况下,轻松管理引用。当然,可以使用任何文本编辑器打开和编辑project.json。
合并MVC, Web API 和Web 页
早期版本中, MVC、Web API 和Web 页一直在使用着不同的方式实现着相同的功能,可以说是殊途同归。例如, MVC 和Web API 都提供了路由,但是MVC routing 类在System.Web.Mvc.Routing 命名空间中,而Web API 中类似的类在System.Web.Http.Routing 命名空间中。再举一个例子, Web 页和 MVC 都是有Razor 语法, 但是仍然包含在相同功能的不同NuGet包中。
在 ASP.NET 5 中, MVC、Web API和and Web 页将被整合到同一框架-MVC 6。这就意味着移除了重复功能模块,使开发应用变得更简单。
在预览版本中, MVC and Web API 首先被合并到MVC 6中。 Web 页面将后在后续发布版本中添加。
增强HTTP性能
ASP.NET 5 提供了一个精炼快速的HTTP 请求管道,该模块化管道允许你仅添加需要的组件,通过减轻管道开销,应用将有更好的吞吐量。
云部署能力
当你创建一个新的 ASP.NET 5 工程,这个工程默认就已经具备轻松部署到云端的结构。Visual Studio 2015 提供了全新的环境配置系统代替了Web.config 文件。新的系统允许使用多种文件类型(例如JSON, XML, or 或环境变量)存储键值对,因此你可以在任意环境中轻松指定值或获取这些值。
同时,ASP.NET 5提供了检测和跟踪已部署云应用问题的工具。
集成依赖注入
依赖注入被内置于ASP.NET 5中。你可以使用 IoC容器注册依赖项。依赖关系的注入促进了正确服务环境的提供。
开源
ASP.NET源码已经发布到GitHub中。不仅仅提供了当前版本源代码,微软也承诺会同步更新GitHub中的源码,你可以及时查看到ASP.NET 的变化,可以下载并且提交更改到GitHub上。
这有助于你了解ASP.NET 代码及技术走向,同时你可以定制自己的ASP.NET。
提供敏捷的开发环境
Visual Studio 2015 提供了一个轻量级的ASP.NET 开发环境。无需重新编译工程,只需要保存更改代码,就可以在浏览器中查看最新结果。
你更改的代码可以在Web工程或者由当前Web工程中引用的类库中。
Visual Studio 使用 Roslyn 编译器允许动态编译。确保你拥有完整、强大的编译框架的同时,拥有趋近于解释语言的开发体验。
每个Visual Studio 的用户界面都具有对应的脚本,因此你可以轻松在UI界面和脚本之间切换。
最后,可以使用其他代码编辑器编辑ASP.NET 5 工程。
关于 Web Forms
微软一直致力于提供给用户新的功能去改善开发体验,你仍旧可以开发Web Forms 应用,并且在Web Forms 4.6 添加了以下新特性:
- HTTP 2
- 异步绑定模式
- Roslyn CodeDOM 编译器
早期版本开发的 Web Forms 应用无需任何更改可以直接在 IIS .NET 4.6框架下运行。不过,无法使用ASP.NET 5 核心CLR新特性。
例如当前有使用Web Forms、 MVC 5、 Web API 2、SignalR 2、 Web Pages 3 或 Entity Framework 6 开发的应用,你仅需设置当前运行时版本为全功能运行时,无需做出任何代码级别修改即可在 ASP.NET 5中运行。 但是, 核心CRL是ASP.NET 5新特性,如果你希望应用具备该运行时的功能,那么需要做出一定的修改。微软提供 API Portability Analyzer 工具可以判断当前应用是否可以使用核心CRL。这个工具还可以分析当前应用可以运行在哪些平台,以及哪些因素阻止其不能在特定平台上运行。同时也会提示所需要的更改以及使用哪些新增接口来替换。
MVC 6 和 SignalR 3 应用使用新的HTTP管道,所以它们无法与使用System.Web 接口的应用兼容。如果需要升级已存在应用到MVC 6 或者 SignalR 3,你必须使用Visual Studio 2015 创建新工程,再导入原有工程,导入过程中需要修改不支持的代码片段。解读完ASP.NET 5的新特性,才能更好地利用这些新特性进行开发,同时还可以借助一些开发工具,ComponentOne Studio for ASP.NET 是ASP.NET平台上的一整套完备的开发工具包,包含的Web窗体控件、MVC scaffolding模板以及HTML5/JavaScript页面组件,仅通过几行代码就可以在系统中实现丰富的功能。
原文地址:ASP.NET 5 Overview
ASP.NET 5系列教程 (一):领读新特性的更多相关文章
- ASP.NET 5系列教程(七)完结篇-解读代码
在本文中,我们将一起查看TodoController 类代码. [Route] 属性定义了Controller的URL 模板: [Route("api/[controller]") ...
- ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web API
ASP.NET 5.0 的主要目标之一是统一MVC 和 Web API 框架应用. 接下来几篇文章中您会了解以下内容: ASP.NET MVC 6 中创建简单的web API. 如何从空的项目模板中启 ...
- ASP.NET 5系列教程 (四):向视图中添加服务和发布应用到公有云
向视图中添加服务 现在,ASP.NET MVC 6 支持注入类到视图中,和VC类不同的是,对类是公开的.非嵌套或非抽象并没有限制.在这个例子中,我们创建了一个简单的类,用于统计代办事件.已完成事件和平 ...
- ASP.NET Identity系列教程(目录)
$(document).ready(function(){ $("#hide").click(function(){ $(".en").hide(); }); ...
- 【ASP.NET Identity系列教程(一)】ASP.NET Identity入门
注:本文是[ASP.NET Identity系列教程]的第一篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...
- 【ASP.NET Identity系列教程(二)】运用ASP.NET Identity
注:本文是[ASP.NET Identity系列教程]的第二篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...
- 【ASP.NET Identity系列教程(三)】Identity高级技术
注:本文是[ASP.NET Identity系列教程]的第三篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...
- Easyui + asp.net MVC 系列教程 完成登录
Easyui + asp.net MVC 系列教程 第09-17 节 完成登录 高清录制 前面八节 在这里 Easyui + asp.net mvc + sqlite 开发教程(录屏)适合入门 在接下 ...
- ASP.NET MVC3 系列教程 - 目录
ASP.NET MVC3 系列教程 - 目录 I:ASP.NET MVC3 新增的功能 ASP.NET MVC3 系列教程 - Razor视图引擎基础语法ASP.NET MVC3 系列教程 - V ...
随机推荐
- 实用的PHP功能详解(一)_php glob()用法
一.使用glob()查找文件 大部分PHP函数的函数名从字面上都可以理解其用途,但是当你看到 glob() 的时候,你也许并不知道这是用来做什么的,其实glob()和scandir() 一样,可以用来 ...
- SUSE zypper failed to work
记录解决的一个问题. 在SUSE 中zypper 不能使用,错误如下: hostname~ # zypper install make Refreshing service 'packman'.Une ...
- Tire树入门专题
POJ 3630Phone List 题目连接:http://poj.org/problem?id=3630 题意:问是否有号码是其他号码的前缀. #include<iostream> # ...
- 一个程序员眼中的好UI
最近接到一个项目发来的UI设计图,我觉得她给的材料很专业,特此分享. 发的RAR压缩包里面有一个images目录,里面放的都是切片好的图片. 图片切片基本上都是靠近边线切的,边上留的空白很少,这样切的 ...
- AIX 查看当前目录内最大的10个目录
du | sort -r n| head -n10 du 查看目录大小: srot 排序,-r 选择倒序,-n选项 看作数值排序(否则将作为字符排序): herd -n10 查看开通 ...
- 深入理解php底层:php生命周期 [转]
1.PHP的运行模式: PHP两种运行模式是WEB模式.CLI模式.无论哪种模式,PHP工作原理都是一样的,作为一种SAPI运行. 1.当我们在终端敲入php这个命令的时候,它使用的是CLI. 它就像 ...
- Angular解决双向数据绑定
<!DOCTYPE html> <html ng-app="myApp1"><body><div ng-controller=" ...
- 【转】mysql 拖库写库用法
mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...
- mysql 相关问题解决
Windows下解决mysql中文乱码问题 在my.ini中, 在[mysqld]下添加 character_set_server = utf8 在[client]下添加 default-charac ...
- bzoj1179(Atm)
---恢复内容开始--- 1179: [Apio2009]Atm Time Limit: 15 Sec Memory Limit: 162 MB Description Input 第一行包含两个整 ...