Visual Studio 2015 开发 ASP.NET 5 有何变化?(转)

出处:http://www.cnblogs.com/xishuai/p/visual-studio-2015-preview-asp-net-5-change.htmlcss

本篇博文目录:html

  • ASP.NET 5 模版
  • ASP.NET 5 目录结构
  • 前端管理工具
  • 无编译开发
  • Microsoft Git Provider
  • 智能感知和错误信息
  • Smart Unit Testing
  • 等待发现。。。

Visual Studio 2015 Preview 版本部分说明:前端

  • ASP.NET 5 Preview runtime with VS2015 Preview only.
  • ASP.NET 5 Preview tooling with VS2015 Preview only.
  • ASP.NET tooling update for both VS2015 Preview and VS2013 Update 4.
  • ASP.NET runtime updates, most of which are in VS2013 Update 4 as well.
  • WebForm 4.6 improvement for VS2015 Preview only

在以上版本说明中,注意反复出现的关键词“only”,也就是说,若是你想要体验此次微软发布的一系列新的东西,好比:C# 6.0、ASP.NET 五、EntityFramework 7.0 等(Visual Studio 其余版本暂不支持),那么首先你须要下载并安装 Visual Studio 2015 Previewhtml5

在以往微软发布或更新 Visual Studio 版本时,咱们开发 ASP.NET 应用程序,带给咱们的变化其实并非很大,或者说你根本就感觉不到变化,你感觉到的只是下载安装了几个 G 的 Update 更新包,但此次微软发布更新的 ASP.NET,无疑是巨大的,首先咱们来看下 ASP.NET 5 的新功能介绍:node

  • Web Forms、MVC 和 Web API 统一编程模型。
  • 无编译开发体验(no-compile),修改代码文件,无需编译,只须要浏览器刷新便可。
  • 无缝云开发支持(Cloud-ready environment configuration)。
  • 新的 HTTP 请求管道(更快)。
  • 内置依赖注入。
  • NuGet 管理一切,甚至是运行时自己。
  • 在 IIS 中运行,或自托管(self-hosted)在进程中。
  • GitHub 开源,意味着你能够查看源代码,或贡献本身的代码。
  • ASP.NET 5 运行在 .NET Framework 或 .NET Core 的 Windows 上(关键词:.NET Core)。
  • .NET Core 支持并行版本(side-by-side versioning)。
  • ASP.NET 5 能够运行在 OS X 和 Linux(Mono 运行时)。

下面咱们看下使用 VS2015 开发 ASP.NET 5 过程当中,有哪些“新鲜”的东西。ios

ASP.NET 5 模版

VS2013 新建 ASP.NET 项目:git

VS2015 新建 ASP.NET 5 项目:github

从图中就能够看到,使用 VS 2015 新建 ASP.NET 5 项目,咱们并不能像 VS 2013 那样能够选择 Web Forms、Web Api,也就是说 ASP.NET 5 是把 Web Forms、MVC 和 Web Api 强制集成到一块的,并无分开建立各自项目的选择,咱们也能够从命名空间上能够看出,好比 VS 2013 新建的 ASP.NET 项目。web

  • MVC 路由配置命名空间为:System.Web.Mvc;
  • Web Api 路由配置命名空间为: System.Web.Http;

而在 ASP.NET 5 中,全部的路由配置命名空间统一为:Microsoft.AspNet.Routing; 路由配置示例代码:npm

app.UseMvc(routes => { //MVC Route routes.MapRoute( name: "default", template: "{controller}/{action}/{id?}", defaults: new { controller = "Home", action = "Index" }); //Web Api Route routes.MapWebApiRoute("DefaultApi", "api/{controller}/{id?}"); });

ASP.NET 5 目录结构

新建 ASP.NET 5 项目,解决方案目录结构:

这边简单说一下我所了解到的,不必定准确,仅做参考:

global.json

global.json 文件存放在“Solution Items”解决方案目录下,“to make better support for project-to-project references. It contains “sources”: [“src”] element, indicating the “src” folder as the parent folder for looking for project references.”,这段是我在 MSDN 一篇博文中摘录的,新建项目的时候,你会发如今 global.json 中,默认有这样的配置:

{
    "sources": [ "src", "test" ] }

仅有的一段配置,我所理解的是 sources 表示此解决方案下的目录结构,src 为解决方案目录(从上面的示意图就能够看出),test 为此 sources 的别名,若是有多个解决方案目录,直接在 global.json 文件中添加 sources 配置便可,有人可能会问?为何要这样进行配置?全部的的项目管理不都是在 *.sln 中进行配置的吗?用记事本打开 ASP.NET5.sln 文件,摘取一段配置:

Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F96F5906-2577-49AD-9693-1809EF74348E}"  ProjectSection(SolutionItems) = preProject global.json = global.json  EndProjectSection ProjectSection(FolderGlobals) = preProject  __JSONSchema = http://json.schemastore.org/global  EndProjectSection EndProject

这段配置其实我不是很懂,但看起来和在 MAC OS 中 Sublime Text 中开发 ASP.NET vNext 项目所保存的 *.sln 很是类似,这意味着什么呢?是否是说明跨平台开发的 ASP.NET vNext 项目,可使用不一样的开发工具打开?这个我没有试过,不过从 json 格式的 global.json 项目配置文件就能够看出一点,我以为这个若是能够的话(能够意味着可能),将是很是棒的!

wwwroot

wwwroot 能够看做是 ASP.NET 5 变化点中提到的自托管(self-hosted),我本身暂时没有对这个进行研究,你能够看一下 wwwroot 中具体的文件目录,其实除了静态文件(CSS、JS等),其余并无什么了,也没有咱们常见的 bin 文件夹下的一大堆程序集文件,使用 VS2015 发布应用程序,也会生成一个 wwwroot 文件夹,不过与解决方案中 wwwroot 不一样的是,发布后的文件夹多了一个 bin 文件,其中只有一个 AspNet.Loader.dll 程序集,AspNet.Loader.dll 是什么东西?我也不是很清楚,Google 搜索了下,又发现几个关键词:OWIN、Helios,而后又发现了一篇很是棒的文章,摘录一段:

Helios runtime without OWIN.
In this section we use the Helios runtime assembly named Microsoft.AspNet.Loader.IIS.dll that is a standalone assembly and it does not have the direct integration with the OWIN pipeline. The application uses the APIs exposed by the Helios rather then using the OWIN extensibility points by the Microsoft.Owin.Host.IIS.

另外,在新建 ASP.NET5 项目的属性页,有一个这样的配置:

摘录自张善友一篇博文的部分文字:

K Runtime Environment(KRE)这是一个命令行环境,将构建并运行(再也不有真正的区别)从他们的新 project.json 。ASP.NET vNext 将 packages.config、NuGet 配置(nuspec)以及项目文件(csprojs)合并到统一的项目依赖配置文件 project.json 中。有个简单的应用程序 K Version Manager (KVM) 负责安装 KRE,能够安装多个版本的 KRE,并能够在他们之间自由切换。

在 KRE target version 中有四个配置选项,默认选项配置为:KRE-CLR-x86.1.0.0-beta1,这部份内容我没有找到相关资料说明,我只在 MSDN 中找到一篇不相关博文的部分说明(并无具体说明不一样选项的不一样之处):The ASP.NET 5 Application's Property Page is a tool window and can be used to specify the KRE target version, the debug target, and whether binaries and NuGet packages should be created during a Visual Studio build.

Dependencies、References

Dependencies 翻译为”依赖“,References 翻译为“引用”,Dependencies 下有两个“目录”:Bower 和 NPM,简单说就是 Bower 下为前端文件(CSS、JS),也能够为前端框架,如 bootstrap,经过 bower.json 进行配置加载,NPM(Node Package Manage)Node.js 的包管理器,能够理解为前端包管理器,经过 package.json 进行配置,以上都是 VS2015 对前端管理增长的新的东西,有些还不是微软本身的东西,我也是刚开始学习,具体怎么配置管理,后面有说明。

References 就是咱们通常见到的“Bin”或“引用”,和以前不一样的是,目录中只有 ASP.NET 5.0 和 ASP.NET Core 5.0,其中全部的程序集都是经过 project.json 文件中的 dependencies 进行配置管理,为何目录结构变了?而不是咱们常见的“引用”下面加载全部的程序集,这样有什么好处?其实我本身以为一点就是引用更加规范了,我新建的是 ASP.NET 5 类型的项目,那全部的程序集应该都必须适用于此框架下,好比 EntityFramework 7.0 就暂时只适用 ASP.NET 5,新建 AS.NET 5 Class Library 也是如此:

project.json

project.json 是 ASP.NET 5 项目中最最主要的文件,里面包含了此项目的不少配置,有点像咱们常使用的 Web.config,project.json 文件是 json 格式,对应架构为:http://json.schemastore.org/project,贴一下示例代码:

{
    /* Click to learn more about project.json  http://go.microsoft.com/fwlink/?LinkID=517074 */
    "webroot": "wwwroot", "version": "1.0.0-*", "dependencies": { "ClassLibrary1": "", "EntityFramework.SqlServer": "7.0.0-beta1", "EntityFramework.Commands": "7.0.0-beta1", "Microsoft.AspNet.Mvc": "6.0.0-beta1", //"Microsoft.AspNet.Mvc.WebApiCompatShim": "6.0.0-beta1", "Microsoft.AspNet.Diagnostics": "1.0.0-beta1", "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-beta1", "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta1", "Microsoft.AspNet.Security.Cookies": "1.0.0-beta1", "Microsoft.AspNet.Server.IIS": "1.0.0-beta1", "Microsoft.AspNet.Server.WebListener": "1.0.0-beta1", "Microsoft.AspNet.StaticFiles": "1.0.0-beta1", "Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta1", "Microsoft.Framework.CodeGenerators.Mvc": "1.0.0-beta1", "Microsoft.Framework.Logging": "1.0.0-beta1", "Microsoft.Framework.Logging.Console": "1.0.0-beta1", "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta1" }, "commands": { /* Change the port number when you are self hosting this application */ "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000", "gen": "Microsoft.Framework.CodeGeneration", "ef": "EntityFramework.Commands" }, "frameworks": { "aspnet50": { }, "aspnetcore50": { } }, "exclude": [ "wwwroot", "node_modules", "bower_components" ], "packExclude": [ "node_modules", "bower_components", "**.kproj", "**.user", "**.vspscc" ], "scripts": { "postrestore": [ "npm install" ], "prepare": [ "grunt bower:install" ] } }

project.json 文件中,咱们最常配置的应该是 dependencies 和 commands,commands 配置和我以前在 MAC OS 中使用 Sublime Text 开发 ASP.NET vNext 差很少,能够经过 server.urls 自定义 URL,就像咱们使用 IIS 进行站点域名绑定同样,dependencies 下是全部程序集的引用管理,并且都是经过 Nuget 进行加载的,这部分就没什么说的了,不少资料都提到过,另外,在 dependencies 配置中添加程序集,VS2015 提供了很是强大的智能感知功能,还能够提示此程序集的版本号,很是酷!

须要注意的是,你会发现,如今 ASP.NET 5 项目所涉及到的程序集都是以“Microsoft”开头,而不是以前最多见的“System”,并且版本号大部分为“1.0.0-beta1”,虽然如今 VS2015 是预览版本,所涉及到的程序集为“Beta”也没什么问题,但“1.0.0”的版本命名确实有些味道在里面,我记得在以前无心间看到一篇博文,讲到如今 ASP.NET 5 所设计到的 Framework 更新问题,大体意思是如今的版本都是“全新的”,并无在以前的版本中进行“扩充”,而后其中说明了以前 Framework 版本的一大堆问题,很遗憾,我只是大体记得,具体是哪篇博文记不得了。

其余文件

Controllers、Models 和 Views 和咱们以前开发的 ASP.NET MVC 项目没什么区别,Migrations 是示例项目中使用 EntityFramework 代码迁移文件,Startup.cs 和 OWIN 项目同样为项目启动配置,和之前的 global.cs 相似。

前端管理工具

在 VS2015 中,微软添加了外部前端管理工具,这在之前的 VS 版本中历来没有,并且这些对我来讲都是新东西,首先须要了解几个关键词:

  • NPM
  • Bower
  • Grunt

若是你也不了解他们,能够从下面几篇博文进行学习:

说一下我本身对这些的理解,Bower 能够看做是“原材料提供商”,NPM 能够看做是“工具的提供商”,Grunt 能够看做是“具体的工具”,什么意思呢?一个“产品”的产生须要工具对原材料的加工处理,选用什么原材料,Bower 说了算(经过 bower.json 进行配置管理),而后 NPM 提供对这些原材料加工的工具(经过 package.json 进行配置管理),好比 Grunt,最后加工出成型的产品(经过 gruntfile.js 进行配置管理),这里面说的“加工”,其实就是发布管理。

另外,在 VS2015 中,提供了一个 Task Runner Explorer 管理窗口,它主要的做用为 NPM 提供的工具,进行“可视化”的管理(好比 Grunt):

无编译开发

无编译开发指的是,使用 VS2015 开发 ASP.NET 5 项目,修改代码文件,无需从新编译生成,只须要保存并刷新浏览器便可,一张图说明:

Microsoft Git Provider

Microsoft Git Provider 是 VS2015 提供的默认代码管理工具,咱们以前在其余的 VS 版本中,若是代码托管使用的是 Git,咱们通常会在 VS 中安装一个叫“Git Source Control Provider”的扩展插件,但基础是必需要安装 Git Extensions,在 VS2015 中内置了一个 Git 插件,并且很是强大,真是不用不知道,一用吓一跳。

是否是很是酷呢?我以为酷炫极了,你能够从这张示意图中获得不少的 Git 信息,每一个方法名上面都有一个最后提交的做者信息,还有更新时间显示,点击这个提示以后,会有一个图表显示更新者的更新点,再点击会有此次更新点的具体信息。。。

VS2015 中的这个功能,总之一句话“碉堡了”。

智能感知和错误信息

VS2015 中的智能感知功能,主要表如今其代码实现是否包含在某一框架中,以下图:

关于错误信息的描述,看了 MSDN 中的一篇博文,感受不是很明白,大体意思是错误信息能够显示不一样框架的实现,这个不一样框架指的是 References 中的 ASP.NET 5.0 和 ASP.NET Core 5.0,其实我也并非很明白这两个框架的具体做用,之后在使用的时候再进行探究吧。

另外,还有一个功能是若是出现错误,VS2015 会“告知”你:代码应该怎么写?

Smart Unit Testing

Smart Unit Testing 原名为 PEX,听说来自微软研究院的技术,有关介绍:Generate smart unit tests for your code

在 VS2015 中,整合了 Smart Unit Testing,使得咱们进行单元测试变得异常简单,你只须要在你须要测试的方法中“右击”,而后点击“Smart Unit Testing”:

Smart Unit Testing 窗口:

在咱们进行这项操做的时候,须要注意的是,并无新建 Unit Test 的单元测试项目,而只是单纯的使用 VS2015 进行单元测试,也就是说单元测试代码咱们并无进行编写,直接使用测试工具对源代码进行测试,这种方式和咱们使用传统的 XUnit 测试有所区别,固然有好处也有坏处,取舍问题,适合就好。

Visual Studio 2015 开发 ASP.NET 5 有何变化?如今来讲只是皮毛,也就是说是一些表面的东西,真正去理解并使用它,只有经过实际项目的应用,目前来讲,Visual Studio 2015 开发 ASP.NET 5 并非那么简单,须要学习的东西还有不少,这篇博文但愿能够给你带来一些帮助。

参考资料:

相关文章
相关标签/搜索