你的位置:首页 > ASP.net教程

[ASP.net教程]为什么重新设计 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文件中添加即可。

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

同时,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 创建新工程,再导入原有工程,导入过程中需要修改不支持的代码片段。