灵活的跨平台运行时需求

早期 .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文件中添加即可。

合并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。

关于 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?的更多相关文章

  1. ASP.NET 5系列教程 (一):领读新特性

    近期微软发布了ASP.NET 5.0,本次发布的新特性需求源于大量用户的反馈和需求,例如灵活的跨平台运行时和自主部署能力使ASP.NET应用不再受限于IIS.Cloud-ready环境配置降低了云端部 ...

  2. ASP.NET 5概观 (ASP.NET 5 Overview)

    http://www.asp.net/vnext/overview/aspnet-vnext/aspnet-5-overview ASP.NET 5概观(ASP.NET 5 Overview) 原作: ...

  3. ASP.NET 5 Overview

    ASP.NET 5概观 (ASP.NET 5 Overview) http://www.asp.net/vnext/overview/aspnet-vnext/aspnet-5-overview AS ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

    在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...

  5. ASP.NET 5 改名 ASP.NET Core 1.0

    今天,Scott Hanselman在其博客上宣布<ASP.NET 5 is dead - Introducing ASP.NET Core 1.0 and .NET Core 1.0>, ...

  6. ASP.NET Core中的依赖注入(1):控制反转(IoC)

    ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制,ASP.NET通过定义接口的方式对它们进行了"标准化&qu ...

  7. ASP.NET MVC 5 02 - ASP.NET MVC 1-5 各版本特点

    参考书籍:<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业 ...

  8. 解读ASP.NET 5 & MVC6系列(7):依赖注入

    在前面的章节(Middleware章节)中,我们提到了依赖注入功能(Dependency Injection),ASP.NET 5正式将依赖注入进行了全功能的实现,以便开发人员能够开发更具弹性的组件程 ...

  9. 初识ASP.NET Core 1.0

    本文将对微软下一代ASP.NET框架做个概括性介绍,方便大家进一步熟悉该框架. 在介绍ASP.NET Core 1.0之前有必要澄清一些产品名称及版本号.ASP.NET Core1.0是微软下一代AS ...

随机推荐

  1. [原创]HierarchyView的实现原理和Android设备无法使用HierarchyView的解决方法

    最近在看一个老外写的东西,发现里面有个类,使用这个类可以让任何设备使用HierarchyView. 众所周知,市面上卖的Android设备,一般都不能使用HierarchyView,所以借此机会,了解 ...

  2. Swift 集合类型

     Swift语言提供数组和字典的集合类型  Swift 语言里的数组和字典中存储的数据值类型必须明确 ,即数组中只能存放同类型的数据. 1: 数组 数组的创建 var shoppingList: St ...

  3. jetty服务器的安装和部署、新增到开机启动服务

    Jetty的首页地址是http://www.mortbay.org/jetty/,点击Downloads进入下载介绍页面,由于Jetty7之后,托管服务有Eclipse接替,所以jetty6.1之前( ...

  4. 搭建windows下filezilla FTP服务器

    FTP服务器必不可少,鉴于serv-u越来越冗余繁多的设置,个人还是比较喜欢简单.干净,满足需求即可的东东,所以选择filezilla.更主要的原因是ta是开元免费使用的,虽然免费,功能却齐全,我发现 ...

  5. java中String byte HexString的转换

    原文:http://blog.sina.com.cn/s/blog_62e9ec530101ebv6.html HexString——>byte public static byte[] hex ...

  6. ruby -- 基础学习(九)filename去除扩展名

         Rails -- filename去除扩展名 简单例子:params[:upload]['preview'].original_filename 的值为templateOne.html.er ...

  7. 开发者讨厌你API的十个原因

    PS:原文是PDF(E文),原书名称:10ReasonsWhyDevelopersHateYourAPI 1.文档的吸引力太弱 解决之道 采用大图片:示例站点 文档清晰度:示例站点 文档易于查找:示例 ...

  8. Innodb Read IO 相关参数源代码解析

    前言:最近在阅读Innodb IO相关部分的源代码.在阅读之前一直有个疑问,show global status 中有两个指标innodb_data_reads 和 innodb_data_read. ...

  9. Office Web Apps Server 概述

    Office Web Apps Server 是新的 Office 服务器产品,它提供 Word.PowerPoint.Excel 和 OneNote 的基于浏览器的版本.单个 Office Web ...

  10. C++ 封装互斥对象

    多线程程序中为了防止线程并发造成的竞态,需要经常使用到Mutex进行数据保护.posix提供了phtread_mutex_t进行互斥保护数据.Mutex的使用需要初始化和释放对应(phtread_mu ...