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

简介:

200904473127714.png

本篇博文目录:

  • 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 项目:

191427583758022.png

VS2015 新建 ASP.NET 5 项目:

191431122346663.png

从图中就可以看到,使用 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 项目,解决方案目录结构:

191458070463662.png

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

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 项目的属性页,有一个这样的配置:

191552518909590.png

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

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 也是如此:

191625428288725.png

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):

191722050313910.png

无编译开发

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

191729590933814.png

Microsoft Git Provider

Microsoft Git Provider 是 VS2015 提供的默认代码管理工具,我们之前在其他的 VS 版本中,如果代码托管使用的是 Git,我们一般会在 VS 中安装一个叫“Git Source Control Provider”的扩展插件,但在 VS2015 中内置了一个 Git 插件,而且非常强大,真是不用不知道,一用吓一跳。

191746141717688.png

是不是非常酷呢?我觉得酷炫极了,你可以从这张示意图中得到很多的 Git 信息,每个方法名上面都有一个最后提交的作者信息,还有更新时间显示,点击这个提示之后,会有一个图表显示更新者的更新点,再点击会有这次更新点的具体信息。。。

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

智能感知和错误信息

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

191758048438074.png

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

191808118127809.png

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

191816188283190.png

Smart Unit Testing

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

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

191844415938051.png

Smart Unit Testing 窗口:

191845510156343.png

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

Visual Studio 2015 开发 ASP.NET 5 有何变化?现在来说只是皮毛,也就是说是一些表面的东西,真正去理解并使用它,只有通过实际项目的应用,目前来说,Visual Studio 2015 开发 ASP.NET 5 并不是那么简单,需要学习的东西还有很多,这篇博文希望可以给你带来一些帮助。




本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/visual-studio-2015-preview-asp-net-5-change.html,如需转载请自行联系原作者




相关文章
|
11天前
|
人工智能 量子技术 C#
【专栏】.NET 开发:开启数字化新时代
【4月更文挑战第29天】.NET开发在数字化新时代中发挥关键作用,借助跨平台能力、高性能和现代编程语言支持,如C#,助力企业实现数字化转型。通过企业级应用开发、移动应用和云计算集成,.NET加速业务流程和提升用户体验。未来,.NET将涉足AI、ML、MR/AR及量子计算,持续推动技术创新和数字化转型。开发者应提升技能,适应高性能需求,把握发展机遇。
|
11天前
|
缓存 监控 算法
【专栏】.NET 开发:实现卓越性能的途径
【4月更文挑战第29天】本文探讨了.NET开发中的性能优化,强调了理解性能问题根源和使用分析工具的重要性。基础优化包括代码优化(如减少计算、避免内存泄漏)、资源管理及选择合适算法。高级策略涉及并行编程、缓存策略、预编译(AOT)和微服务架构。持续性能测试与监控是关键,包括性能测试、监控分析和建立优化反馈循环。开发者应持续学习和实践性能优化,以构建高性能应用。
|
11天前
|
开发框架 .NET C#
【专栏】理解.NET 技术,提升开发水平
【4月更文挑战第29天】本文介绍了.NET技术的核心概念和应用,包括其跨平台能力、性能优化、现代编程语言支持及Web开发等特性。文章强调了深入学习.NET技术、关注社区动态、实践经验及学习现代编程理念对提升开发水平的重要性。通过这些,开发者能更好地利用.NET构建高效、可维护的多平台应用。
|
11天前
|
机器学习/深度学习 vr&ar 开发者
【专栏】.NET 技术:引领开发新方向
【4月更文挑战第29天】本文探讨了.NET技术如何引领软件开发新方向,主要体现在三方面:1) 作为跨平台开发的先锋,.NET Core支持多操作系统和移动设备,借助.NET MAUI创建统一UI,适应物联网需求;2) 提升性能和开发者生产力,采用先进技术和优化策略,同时更新C#语言特性,提高代码效率和可维护性;3) 支持现代化应用架构,包括微服务、容器化,集成Kubernetes和ASP.NET Core,保障安全性。此外,.NET还不断探索AI、ML和AR/VR技术,为软件开发带来更多创新可能。
|
11天前
|
物联网 vr&ar 开发者
【专栏】.NET 技术:为开发注入活力
【4月更文挑战第29天】本文探讨了.NET技术的创新,主要体现在三个方面:1) .NET Core实现跨平台开发革命,支持多种操作系统和硬件,如.NET MAUI用于多平台UI;2) 性能提升与生产力飞跃,C#新特性简化编程,JIT和AOT优化提升性能,Roslyn提供代码分析工具;3) 引领现代化应用架构,支持微服务、容器化,内置安全机制。未来,.NET 7将带来更多新特性和前沿技术整合,如量子计算、AI,持续推动软件开发创新。开发者掌握.NET技术将赢得竞争优势。
|
11天前
|
人工智能 前端开发 Cloud Native
【专栏】洞察.NET 技术的开发趋势
【4月更文挑战第29天】本文探讨了.NET技术的三大发展趋势:1) 跨平台与云原生技术融合,通过.NET Core支持轻量级、高性能应用,适应云计算和微服务;2) 人工智能与机器学习的集成,如ML.NET框架,使开发者能用C#构建AI模型;3) 引入现代化前端开发技术,如Blazor,实现前后端一致性。随着.NET 8等新版本的发布,期待更多创新技术如量子计算、AR/VR的融合,.NET将持续推动软件开发的创新与进步。
|
11天前
|
开发框架 物联网 测试技术
【专栏】.NET 开发:打造领先应用的基石
【4月更文挑战第29天】本文探讨了.NET开发框架为何成为构建领先应用的首选。高性能与稳定性是.NET的核心优势,它采用先进的技术和优化策略,如.NET Core的轻量级设计和JIT/AOT编译模式。跨平台兼容性让开发者能用相同代码库在不同操作系统上构建应用。现代化的开发体验,如C#语言的创新特性和Visual Studio的强大工具,提升了开发者生产力。丰富的生态系统和广泛支持,包括庞大的开发者社区和微软的持续投入,为.NET提供了坚实后盾。
|
11天前
|
人工智能 前端开发 Devops
【专栏】洞察.NET 技术在现代开发中的作用
【4月更文挑战第29天】本文探讨了.NET技术在现代软件开发中的核心价值、应用及挑战。.NET提供语言统一性与多样性,强大的Visual Studio工具,丰富的类库,跨平台能力及活跃的开发者社区。实际应用包括企业级应用、Web、移动、云服务和游戏开发。未来面临性能优化、容器化、AI集成等挑战,需持续创新。开发者应深入理解.NET,把握技术趋势,参与社区,共创美好未来。
|
11天前
|
机器学习/深度学习 人工智能 开发者
【专栏】.NET 技术:为开发带来新机遇
【4月更文挑战第29天】本文探讨了.NET技术如何为软件开发带来新机遇,分为三个部分:首先,.NET的跨平台革命,包括.NET Core的兴起、Xamarin与.NET MAUI的移动应用开发、开源社区的推动及性能优化;其次,介绍了云服务与微服务架构的集成,如Azure云服务、微服务支持、DevOps与CI/CD,以及Docker容器化;最后,讨论了AI与机器学习集成,如ML.NET、认知服务、TensorFlow和ONNX,使开发者能构建智能应用。面对这些机遇,开发者应不断学习和适应新技术,以创造更多价值。
|
11天前
|
算法 Java 编译器
【专栏】.NET 开发:实现高效能的秘诀
【4月更文挑战第29天】本文探讨了提升.NET应用性能的三个方面:理解.NET运行时(垃圾回收、JIT编译器、异步编程和线程并发)、优化代码与算法(代码细节、数据结构选择和算法效率)以及利用工具和框架(性能分析工具、高性能库和CI/CD流程)。通过深入学习、合理设计和有效工具,开发者可实现.NET应用的高效能。