首页 > 学院 > 开发设计 > 正文

分享我对 ASP.NET vNext 的一些感受,也许多年回过头看 So Easy!

2019-11-17 01:35:03
字体:
来源:转载
供稿:网友

分享我对 asp.net vNext 的一些感受,也许多年回过头看 So Easy!

写在前面

阅读目录:

  • Visual Studio "14" CTP
  • 关于 ASP.NET vNext
  • ASP.NET vNext 实践
  • 后记

  ASP.NET vNext 发布已经过去了一个多月的时间,发布详情请访问:振奋人心呐!关于下一代.NET——ASP.NET vNext 的更多说明,当时看这完篇新闻的第一感觉就像文章标题一样“振奋人心”,其实每个人都有自己的感受,对于我来说,ASP.NET vNext 最大的特性就是跨平台(基于 Mono 运行时),试想下:作为.NET程序员,终于不被java或C++程序员挑自己的短板,确实是蛮振奋人心的。当然,除了跨平台,使用 Roslyn 编译器动态编译(修改源代码,刷新页面即可)、云优先(Cloud First)、开源等等特性也是蛮重要的。

  以下内容,只是一些个人看法,仅供参考学习,也欢迎讨论指教。

Visual Studio "14" CTP

  Visual Studio "14" CTP(Community Technology PReviews)是下一代 Visual Studio 的社区预览版,我个人认为 Visual Studio "14" CTP(以下简称:VS 14 CTP) 就是为 ASP.NET vNext 而量身定做的,当然也包含了其他模块,比如:Store Apps、Cloud等等,以下是关于VS 14 CTP 的版本描述:

CTPs are provided for testing and feedback purposes only. CTPs are unsupported, English-only releases. They are not subject to final validation and are not intended for use on production computers, or to create production code.Installing a CTP release will place a computer in an unsupported state. For that reason, we recommend only installing CTP releases in a virtual machine, or on a computer that is available for reformatting.Currently, Visual Studio "14" CTPs have known compatibility issues with previous releases of Visual Studio and should not be installed side-by-side on the same computer.

  从版本中可以看出,VS 14 CTP 仅用于测试和反馈,只提供英文版本,而且安装VS 14 CTP 会和已有的Visual Studio 版本冲突,也就是说安装VS 14 CTP 要把电脑中Visual Studio 其他版本卸载,才能进行安装。

  至于“installed side-by-side on the same computer”,因为是先安装的 VS 14 CTP,再安装的 Visual Studio 其他版本,暂时没发现异常情况。

  VS 14 CTP 创建ASP.NET vNext 项目模块:

  VS 14 CTP 下载地址:

  • Web 版:http://go.microsoft.com/fwlink/?LinkId=399011
  • ISO 版:http://go.microsoft.com/fwlink/?LinkId=399010

关于 ASP.NET vNext

  ASP.NET vNext 的发布文章称其为.NET下一代,其实我个人觉得并不准确,ASP.NET vNext 就像其名字一样,应该是 ASP.NET 的下一代版本。ASP.NET vNext 代表着.NET的未来的发展方向,比如说跨平台、开源等,也就是 vNext。关于 ASP.NET vNext,园中也有几位大神写过几篇介绍的文章,以下是个人整理关于 ASP.NET vNext 的一些特性(更新时间为6月3日):

  • MVC、 Web API 和 Web Pages合并成一个框架,称为 MVC 6。新的框架使用一组通用的抽象为路由、 行为选择、 筛选器、 模型绑定等等。

  • MVC 6 并不依赖于 System.Web,是一个更精简的框架,用更快的启动时间和内存占用较低(也就是“低内存消耗”以及“高吞吐量”)。

  • ASP.NET vNext 应用程序可以使用云优化(Cloud-Optimized).NET Framework。大约 11 M的大小相比于 200 M的完整的框架,也是组成的 NuGet 包的集合(云优化的功劳)。

  • 云优化框架的减少使实际部署的应用程序框架:

    • 在同一台服务器上,你可以使用不同版本的 Framework 运行应用程序。
    • 你的应用程序均从服务器上的架构更改,绝缘。
    • 你可以为每个应用程序的 Framework 更新自己的时间表。
    • 当你部署应用造成开发机器上的 Framework 修补程序级别和应用服务器之间不匹配的时候,不会出现任何错误(也就是“绝缘”的意思)。
  • 提供云优化 Framework 的 NuGet 包,可实现以下目标:

    • 按需加载,不必要的部分不会加载到应用程序中。
    • 在 Framework 中,由于每个部分可以独立更新,微软可以将更新变的更快。
  • ASP.NET vNext 与 Host 无关。你可以承载你的应用程序在 IIS 中,或自托管在一个自定义的过程(web API 2 和 SignalR 2 已经支持自托管,ASP.NET vNext 也会给 MVC 带来同样的功能)。

  • 支持依赖注入(也可以使用自己的 IoC 容器来注册依赖项)。

  • ASP.NET vNext 使用 Roslyn 编译器动态编译代码。你可以编辑一个代码文件,刷新浏览器,并看到所做的更改,并没有重建项目。除了简化开发过程,动态代码编译在现在变得可能,如在 Visual Studio Online ("Monaco") 进行代码编写,你可以选择你自己的编辑器和工具。

  • ASP.NET vNext 开放源代码。

  • ASP.NET vNext 跨平台。

  .NET未来构想图,对于 ASP.NET vNext 来说,可以看出尤其侧重于云优化-Cloud Optimized,包含高吞吐量、低内存消耗、并行执行和跨平台:

  ASP.NET vNext 成员图:

  从上图可以更直观的看出 ASP.NET vNext 所涵盖的东西,这样的统一管理,带给编程人员好处是很多的,比如:一路由系统、 一个模型绑定系统、 一个筛选器管道等,也可以完美的从 Web Pages 过渡到 MVC。

  .NET vNext 和 .NET vNext -云优化(包含模块)示意图:

  ASP.NET vNext 云优化示意图:

  代码到 Web 服务器示意图,”快速迭代式开发“,即修改代码刷新浏览器,接近实时,也可以实现”云编辑“功能:

  ASP.NET vNext 跨平台示意图:

ASP.NET vNext 实践

  关于 ASP.NET vNext 的实践,MSDN 已经更新了"Music Store"(音乐商店)项目,感兴趣的朋友可以参考练习下,下面做的ASP.NET vNext 简单示例,只是个人的学习记录,方面以后自己查看,园友们可以直接略过。

  首先打开 VS 14 CTP,新建 ASP.NET vNext 项目。

  ASP.NET vNext 主要包含三类模板

  • ASP.NET vNext Web application:用于创建 Web 应用程序。
  • ASP.NET vNext Class Library:用于创建云优化类库项目。
  • ASP.NET vNext Console Application:用于创建控制台应用程序。

  新建 vNextDemo 项目后,发现目录结构非常简单.

  共包含两个项目文件:

  • project.json:配置应用程序所有依赖项。
  • Startup.cs:程序启动类。

project.json

  在 ASP.NET vNext 中看不到我们常用的 config 文件了,取而代之的是 json(或是其他文件类型)配置文件,例如用来配置连接字符串的 config.json 文件:

1 {2     "Data": {3         "DefaultConnection": { 4             "ConnectionString": "Server=(localdb)//mssqllocaldb;Database=aspnetvnext-49333c44-d261-476e-b40a-3d9b759fc2da;Trusted_Connection=True;MultipleActiveResultSets=true"5         }6     }7 }

  贴一段 project.json 示例配置:

 1 { 2     "dependencies": { 3         "Helios": "0.1-alpha-build-0585", 4         "Microsoft.AspNet.Mvc": "0.1-alpha-build-1268", 5         "Microsoft.AspNet.Identity.Entity": "0.1-alpha-build-1059", 6         "Microsoft.AspNet.Identity.Security": "0.1-alpha-build-1059", 7         "Microsoft.AspNet.Security.Cookies": "0.1-alpha-build-0506", 8         "Microsoft.AspNet.Server.WebListener": "0.1-alpha-build-0520", 9         "Microsoft.AspNet.StaticFiles": "0.1-alpha-build-0443",10         "Microsoft.Data.Entity": "0.1-alpha-build-0863",11         "Microsoft.Data.Entity.SqlServer": "0.1-alpha-build-0863",12         "Microsoft.Framework.ConfigurationModel.Json": "0.1-alpha-build-0233",13         "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0-alpha"14     },15     "commands": {16         /* Change the port number when you are self hosting this application */17         "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000"18     },19     "configurations": {20         "net45": {21             "dependencies": {22                 "System.Data": "",23                 "System.ComponentModel.DataAnnotations": ""24             }25         },26         "k10": {27         }28     }29 }

  在 dependencies(依赖关系)节点,看起来有点像 NuGet 的 packages.config 配置包,但是不同之处是,以前版本中会直接添加这项项的引用,而且还取决于这些包,现在都是动态配置,比如删除一个引用,它会自动删除所依赖项,如果在 project.json 中未使用,也会动态的移除掉。

  除了 dependencies,还包含 commands(命令)和 configurations(配置)节点,commands 中的”web“配置表示,应用程序默认启动地址,configurations 中的”net45“表示完整的桌面应用程序,”k10“表示云优化。

Startup.cs

  Startup.cs 是整个应用程序的启动类,有点类似于我们常用的 Global.asax,贴一段示例代码(ASP.NET vNext Web Application):

 1 using System; 2 using Microsoft.AspNet.Builder; 3 using Microsoft.AspNet.Http; 4 using Microsoft.AspNet.Identity; 5 using Microsoft.AspNet.Identity.Security; 6 using Microsoft.AspNet.Routing; 7 using Microsoft.AspNet.Security.Cookies; 8 using Microsoft.Data.Entity; 9 using Microsoft.Framework.ConfigurationModel;10 using Microsoft.Framework.DependencyInjection;11 using WebApplication1.Models;12 13 namespace WebApplication114 {15     public class Startup16     {17         public void Configure(IBuilder app)18         {19             // Enable Browser Link support20             app.UseBrowserLink();21 22             // Setup configuration sources23             var configuration = new Configuration();24             configuration.AddJsonFile("config.json");25             configuration.AddEnvironmentVariables();26 27             // Set up application services28             app.UseServices(services =>29
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表