·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> Visual Studio 2015 开发 ASP.NET 5 有何变化?

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

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

Visual Studio 2015 开发 asp.net 5 有何变化?

本篇博文目录:

  • 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 5、EntityFramework 7.0 等(Visual Studio 其他版本暂不支持),那么首先你需要下载并安装 Visual Studio 2015 Preview。

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

  • 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 过程中,有哪些“新鲜”的东西。

ASP.NET 5 模版

VS2013 新建 ASP.NET 项目:

VS2015 新建 ASP.NET 5 项目:

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

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

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

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) = preProjectglobal.json = global.jsonEndProjectSectionProjectSection(FolderGlobals) = preProject__JSONSchema = http://json.schemastore.org/globalEndProjectSectionEndProject

这段配置其实我不是很懂,但看起来和在 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 h