ASP.NET Core 2.0 发布日期:2017年8月14日

ASP.NET团队宣布ASP.NET Core 2.0正式发布,发布Visual Studio 2017 15.3支持ASP.NET Core 2.0,提供新的Razor Pages项目模板。

详细发布信息查看.NET Core 2.0.0发布说明文档

最新版SDK下载:https://dot.net/core

ASP.NET Core 2.0提供一系列新功能使得Web应用开发、发布、部署和维护变得更加容易,框架性能得到进一步提升。

对于.NET Core 2.0的发布介绍,围绕2.0的架构体系,本系列相关文章:

  1. .Net Core 2.0 生态(1).NET Standard 2.0 特性介绍和使用指南(已发布)
  2. .Net Core 2.0 生态(2).NET Core 2.0 特性介绍和使用指南(已发布)
  3. .Net Core 2.0 生态(3)ASP.NET Core 2.0 特性介绍和使用指南(已发布)
  4. .Net Core 2.0 生态(4)Entity Framework Core 2.0 特性介绍和使用指南(已发布)

前言:答读者问(time by:2017.8.19)

在开始之前先集中回复前两篇文章评论中大家比较关注的问题

  • 问题1:工具的更新问题

    问题by @軒轅劍:有没单独升级到15.3的更新啊?

    答案by @yyww:下载新版本的安装程序,1M多,会自动更新的

VS2017安装程序经过重构变成模块化安装,所以对于15.3版本的更新是增量更新,下载最新的安装程序,会自动检测。

Visual Studio For Mac 7.1也一样,检测软件更新,进行增量更新。

  • 问题2:.NET Standard到底是什么?

    问题by @wdwwtzy:这个系列不错,想听听 standard 到底是啥,建议深入一些,现在太浅了

    问题by @海阔天空XM:几张体系结构图?

.NET Standard是一组API集合,支持.NET Standard的.NET平台之间可以实现代码共享,基于.NET Standard构建的类库可以在支持.NET Standard的.NET平台进行复用,防止代码碎片化。

目前支持.NET Standard 2.0的平台有:

  • .NET Framework 4.6.1
  • .NET Core 2.0
  • Mono 5.4
  • Xamarin.iOS 10.14
  • Xamarin.Mac 3.8
  • Xamarin.Android 7.5
  • UWP (预计2017年下半年发布)

在深入一点,看这张图

平台对.NET Standard 支持对应表(by @农码一生)



【图】

  • 问题3:关于System.Drawing API是否提供?

    问题by @PowerShell免费软件:.net core2正式版了,增加了System.Drawing。

    有人在上面成功运行以前的winform程序吗?谁能帮忙搞个hello试试看吗?

命名空间System.Drawing是增加了,只提供了结构体,并没有提供绘图类,相信在接下来的版本会支持。

项目升级到ASP.NET Core 2.0

ASP.NET Core 2.0 可以同时运行在.NET Framework 4.6.1.NET Core 2.0框架,更改项目目标框架为:netcoreapp2.0

<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>

在Visual Stdio中可以设置项目属性

也可以手动编辑项目文件,将原项目中Microsoft.AspNetCore.*引用包升级到2.0

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.0.0" />
</ItemGroup>

ASP.NET Core 2.0项目发布做了优化,发布文件只包含引用的类库。这个优化有助于使发布过程更流畅,更容易分发Web应用程序。

将 ASP.NET Core 1.0 升级到 2.0 详细内容可以参看这篇文章

新增功能:Razor Pages介绍

ASP.NET Core 2.0中,提供一种新的编码方式,这种方式在页面逻辑集中的场景下比使用MVC架构开发更加简单。

Razor Pages是页面优先的架构,允许用户开发界面时,使用简单的服务端交互方式,通过页面模型对象(Page Model)进行数据交互,而无需控制器中转。

在项目启动文件中,添加代码

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// 包含对Razor Pages 和控制器支持.
services.AddMvc();
} public void Configure(IApplicationBuilder app)
{
app.UseMvc();
}
}

当在服务注册中调用AddMvc方法时会激活Razor Pages功能。

添加一个测试页面,放在Pages目录下,命名为Now.cshtml

@page

<html>
<body>
<h2>The server-local time now is:</h2> <p>@DateTime.Now</p>
</body>
</html>

这看起来像是标准的Razor视图,只是在页面顶部添加标记@page,就定义该页面为独立的Razor Page,在页面中依然可以使用 HtmlHelpers, TagHelpers 或者.NET 代码,可以像在Razor视图中一样定义方法,只需添加块级元素@functions,然后在其内部编写代码。

@page

@functions {

public string FormatDate(DateTime theTime) {
return theTime.ToString("d");
} } <html>
<body>
<h2>The server-local time now is:</h2> <p>@FormatDate(DateTime.Now)</p>
</body>
</html>

结合使用PageModel对象,可以创建更加复杂的页面交互,PageModel是一个MVVM架构概念,相当于视图模型(VM),允许执行方法并将属性绑定到对应的页面中。在Pages目录中创建一个NowModel.cshtml.cs 类。

namespace MyFirstRazorPage.Pages
{
public class NowModel : PageModel
{ private IFileProvider _FileProvider; public NowModel(PhysicalFileProvider fileProvider)
{
_FileProvider = fileProvider;
LastModified = _FileProvider.GetFileInfo("Pages/Now.cshtml").LastModified.LocalDateTime;
}
public DateTime LastModified { get; set; } public void OnGet() { } }
}

这个类继承自PageModel,根据页面业务需要可以构建与页面交互的逻辑类,并且可以对该类中的业务逻辑进行单元测试。在本例中,将LastModified属性加载到页面。另外注意OnGet方法用来声明PageModel可以响应HTTP GET请求。

更新Razor Page,使用PageModel定义的LastModified属性。

@page

@model MyFirstRazorPage.Pages.NowModel

<html>
<body>
<h2>This page was last updated:</h2> <p>@Model.LastModified</p>
</body>
</html>

更多Razor Pages详细介绍参看资料

模板更新

模板已经增强,不仅包含MVC模式的Web应用程序模板,也包含Razor Pages Web应用程序模板,还包含一系列单页应用(SPA)程序模板。这些单页模板使用Javascript服务功能在ASP.NET Core服务中嵌入NodeJS,将JavaScript应用程序服务器作为项目中的一部分进行编译。

命令行工具提供的内置项目模板

Entity Framework Core 2.0提供DbContext池

参看:Entity Framework Core 2.0发布(稍后发布,会用单独一篇文章总结)

监视器、无代码更改配置、应用程序监视器

运行在Azure应用服务上的ASP.NET Core 2.0项目无需修改,提供性能分析、错误报告和Azure应用程序监视功能。

在Visual Studio 2017中右键项目,Add->Application Insights Telemetry,启动应用程序数据收集,然后可以直接预览日志信息和应用程序性能报告。

这个功能可以让我们在开发阶段,对应用程序性能做出测试和反馈,当程序发布到Azure之后,可以在Azure门户中进行分析和调试,程序信息的收集从第一次发布应用程序并导航到云门户时开始。Azure将会以一个紫色横幅提示您,这表明应用程序监视和分析功能是可用的。

点击进入查看应用程序监视服务,无需重新编译和部署,应用程序监视服务将开始报告捕获到的活动数据。

数据报告显示了应用程序中失败的请求和错误的数量。单击关注的数据项,将展示关于失败请求的详细信息:

上图中抛出一个System.Exception,点击查看异常报告,可以查看抛出异常的详细信息,包括调用堆栈:

应用程序监视的快照调试现在支持ASP.NET Core 2.0应用。如果设置在应用程序中配置快照调试,则顶部的“打开调试快照”链接将显示并显示完整的调用堆栈,可以单击堆栈中的方法来查看本地变量:

好了!我们可以更进一步,点击右上角的“下载快照”按钮,在Visual Studio中启动一个异常调试会话。

这些页面的性能如何?从应用程序监视页面中,选择左侧的性能选项,深入地研究每个请求在应用程序的性能跟踪。

更多信息参看使用应用程序洞察的性能分析

如果您想要使用您的应用程序的原始日志,您可以在应用程序服务中启用诊断日志,并将诊断级别设置为警告或错误,以查看该异常被抛出。

最后,选择左边的日志流,您可以看到您在开发人员工作站上所拥有的控制台。选择将在Azure中触发的严重级别或更大级别的错误和日志消息。

所有应用程序感知功能都可以在 ASP.NET Core 中使用,不用重新编译和部署。快照调试需要添加额外的步骤和一些代码,而配置就像在启动类中添加额外代码一样简单。

更新信息参看:应用程序洞察在线文档

Razor支持C# 7.1

Razor视图引擎借助Roslyn编译器支持C# 7.1功能,比如:默认表达式、推断的元组名称和模式匹配泛型。要在项目中使用c# 7.1特性,在项目文件中添加以下属性,然后重新加载解决方案:

<LangVersion>latest</LangVersion>

C# 7.1本身还是预览版状态,可以在其GitHub存储库中查看这些特性的语言规范

简化应用程序的主机配置

主机配置已经大大简化,默认ASP.NET Core项目模板中提供WebHost.CreateDefaultBuilder,自动分配一个Kestrel服务器,如果IIS可用则尝试运行在IIS上,并配置标准控制台日志提供程序。

public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
} public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}

总结

ASP.NET Core 2.0提供的一系列新功能提供编写应用程序的新方法,简化了应用程序在生产环境的管理和维护。

.Net Core 2.0生态(3):ASP.NET Core 2.0 特性介绍和使用指南的更多相关文章

  1. .Net Core 2.0生态(4):Entity Framework Core 2.0 特性介绍和使用指南

    前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...

  2. .Net Core 2.0 生态(2).NET Core 2.0 特性介绍和使用指南

    .NET Core 2.0发布日期:2017年8月14日 前言 这一篇会比较长,介绍了.NET Core 2.0新特性.工具支持及系统生态,现状及未来计划,可以作为一门技术的概述来读,也可以作为学习路 ...

  3. .Net Core 2.0 生态(1).NET Standard 2.0 特性介绍和使用指南

    .NET Standard 2.0 发布日期:2017年8月14日 公告原文地址 前言 早上起来.NET社区沸腾了,期待已久的.NET Core 2.0终于发布!根据个人经验,微软的产品一般在2.0时 ...

  4. .Net大局观(2).NET Core 2.0 特性介绍和使用指南

    .NET Core 2.0发布日期:2017年8月14日 前言 这一篇会比较长,系统地介绍了.NET Core 2.0及生态,现状及未来计划,可以作为一门技术的概述来读,也可以作为学习路径.提纲来用. ...

  5. 【EF】Entity Framework Core 2.0 特性介绍和使用指南

    阅读目录 前言 获取和使用 新特性 项目升级和核心API变化 下一步计划 遗憾的地方 回到目录 前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升 ...

  6. 008.Adding a model to an ASP.NET Core MVC app --【在 asp.net core mvc 中添加一个model (模型)】

    Adding a model to an ASP.NET Core MVC app在 asp.net core mvc 中添加一个model (模型)2017-3-30 8 分钟阅读时长 本文内容1. ...

  7. ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门

    一.前言 1.本教程主要内容 ASP.NET Core 中间件介绍 通过自定义 ASP.NET Core 中间件实现请求验签 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10 SD ...

  8. ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC控制器简介 ASP.NET Core MVC控制器操作简介 ASP.NET Core MVC控制器操作简介返回类型简介 ASP.NET C ...

  9. C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理

    C#编译器优化那点事   使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...

随机推荐

  1. 极致精简的webservice例子

    看了网上好多关于webservice的例子,基本上对初学者来说都是模棱两可云里雾里,现在,我将网上关于webservice的讲解提炼出来,通过一个最简单使用并且方便的例子,告诉大家什么是webserv ...

  2. Vijos 1033 整数分解(版本2)

    描述 整数分解(版本2) 一个正整数可以分解成若干个自然数之和.请你编一个程序,对于给出的一个正整数n(1<=n<=1500),求出满足要求的分解方案,并使这些自然数的乘积m达到最大. 例 ...

  3. isNAN()的使用

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. 多线程下System.Security.Cryptography.Aes CreateDecryptor报“Safe handle has been closed”的解决方案

    因为系统需要对一些核心数据进行预加载以保证查询速度. 所以在application_start 事件中启用了后台线程对相关的数据进行加载并解密(为了保证解密的效率,将AES对像做了静态对像来保存:pr ...

  5. java IO之 File类+字节流 (输入输出 缓冲流 异常处理)

    1. File类

  6. Unrooted Tests错误

    使用Junit4做测试,遇到如下问题: 条件如下: Eclipse里的Maven工程. 使用JUnit4(这个是否必须不知,反正我的工程用的4) 修改某个Test类里的方法名,或者增加一个Test方法 ...

  7. 【亲测】appium_v1.4.16版本自动化适配android7.0系统

    要解决的问题:appium在androidV7.0系统上运行时报错 Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.a ...

  8. Memcached的安装与使用

    这一段折腾了下Memcached,有所收获吧,记录一下. 1.什么是Memcached memcached是一种缓存技术, 他可以把你的数据放入内存,从而通过内存访问提速,因为内存最快的, memca ...

  9. 微信小程序多宫格抽奖

    最近闲来无事,做了一个多宫格抽奖的例子,有什么需要改进或者错误的地方,请留言,谢谢 首先看效果 思路是先让其转动2圈多,然后再进行抽奖,格子运动用的是setTimeout,让其运行的时间间隔不一样,然 ...

  10. log4j日志重定向

    配置相应的类名或者包名,将日志重新定向到输入文件里 log4j.rootLogger=INFO,DEBUG,CONSOLE ##过滤日志 log4j.logger.[类名|包名]=INFO,[输出目的 ...