.NET 8 中的调试增强功能

news/2024/4/18 16:34:48

作者:James Newton-King
排版:Alan Wang

开发人员喜欢 .NET 强大且用户友好的调试体验。您可以在您选择的 IDE 中设置断点,启动已经附加上调试器的程序,逐步执行代码并查看 .NET 应用程序的状态。

在 .NET 8 中,我们致力于改善 .NET 应用中常用类型的调试体验。这些包括:

  • HttpContext 和其朋友
  • WebApplication
  • MVC and Razor Pages
  • gRPC
  • 端点元数据
  • 日志
  • 配置

您不需要深入了解这些类型的内部结构就可以找到有关应用程序的信息。我们为常用的 .NET 类型添加了自定义调试属性的功能来显示调试摘要以及提供简化的调试代理。

HttpContext 和其朋友

HttpContextHttpRequestHttpResponse 对于使用 ASP.NET Core 构建 Web 应用程序的开发人员来说是非常熟悉的。如果您想查看 HTTP 请求的状态,那么您需要调试这些类型。

我们审查了 ASP.NET Core 的 HTTP 类型的属性,以便它们更容易与调试器一起使用。查看请求和响应值(例如标头、cookie、查询字符串和表单值)变得更加容易,现在 HttpRequestHttpResponse 还显示了用户友好的类型摘要,像 HTTP 请求 URL 或 HTTP 响应状态码之类的关键信息可以立即看见。

下面的屏幕截图显示了对 HttpContext 相关类型的改进:
.NET 7
在这里插入图片描述

.NET 8
在这里插入图片描述
相比之前好了很多!尽管隐藏了一些数据,但没有丢失任何内容。您可以选择 Raw View 以查看所有字段和属性。

WebApplication

WebApplication 是在 Program.cs 中配置和启动 ASP.NET Core 应用程序的默认方式。 更新后的 WebApplication 会显示重要信息,例如 IDE 调试器中配置的端点、中间件和 IConfiguration 值。
.NET 7
在这里插入图片描述
.NET 8
在这里插入图片描述
我们对 .NET Generic Host 进行了类似的改进。Generic Host 用于托管没有 HTTP 端点的应用程序,例如 Unix daemons 和 Windows Services。

MVC and Razor Pages

ASP.NET Core MVC 和 Razor Pages 是构建 Web 应用程序的流行框架。控制器、视图和 Razor Pages 在 .NET 8 中的调试获得了改进。

在调试这些框架时,我们发现了很多额外的信息。众多的类型让人感觉很混乱。在 .NET 8 中,我们审查了每一种类型并扪心自问:“这会给调试带来快乐吗?”。现在,大多数 MVC 和 Razor 类型都可以更好地进行调试,并且隐藏了非必要类型。下面的屏幕截图展示了 MVC 控制器的改进:

.NET 7
在这里插入图片描述
.NET 8
在这里插入图片描述
我们认为您会同意这种整理后的输出更容易处理。

gRPC

gRPC 是一个用于构建 RPC 服务的高性能库。最新版本的 gRPC 让您可以更容易地调试来自客户端的 gRPC 调用。现在的 gRPC 调用包含有关其方法、状态、响应标头和尾部的信息。有关请求/响应和流式传输的其他信息取决于 gRPC 调用类型。下面的示例是一元调用。
grpc-dotnet 2.55.0
在这里插入图片描述
grpc-dotnet 2.56.0
在这里插入图片描述
您可以通过将 Grpc.Net.Client 更新到 2.56.0 或更高版本来体验这些改动。

端点元数据

端点是 ASP.NET Core 的核心概念。 端点代表可执行的请求处理代码。当应用程序启动时,在应用程序中定义的端点被注册为路由。然后,当 HTTP 请求进入应用程序时,路由将请求匹配到端点。 端点的示例包括:

  • MVC actions
  • Razor Pages
  • Minimal APIs
  • gRPC methods

端点可以有元数据,元数据控制请求的执行方式。例如,API 上的 [Authorize] 属性保存为端点元数据,然后 AuthorizationMiddleware 在处理请求时使用它。

在 .NET 8 中,调试文本已经添加到公共元数据中。下面的屏幕截图比较了 .NET 7 和 .NET 8 中的 Endpoint.Metadata 调试。更容易理解配置了哪些元数据以及如何处理与端点匹配的请求。
.NET 7
在这里插入图片描述
.NET 8
在这里插入图片描述

日志

Microsoft.Extensions.Logging 是 .NET 应用程序开发中流行的日志记录库,在整个 ASP.NET Core 中使用。应用程序使用 ILogger 输出结构化日志。

ILogger 从来就不是为调试而设计的。这是一个用于写入日志的简单接口。在调试 ILogger 实例时,这种设计选择是显而易见的。它显示了为性能而设计的难以理解的数据结构。

在 .NET 8 中,可以更容易地了解是否启用了日志记录以及配置了哪些日志记录提供程序。 ILogger 显示了一个用户友好的有用信息列表,例如其名称、配置的日志级别、是否启用以及配置的日志记录提供程序。

.NET 7
在这里插入图片描述
.NET 8
在这里插入图片描述

配置

Microsoft.Extensions.Configuration 是 .NET 应用程序和库使用的配置抽象层。 IConfiguration 可以从配置提供程序加载值,例如 JSON 文件、环境变量、Azure Key Value 或第三方提供程序。

使用配置的示例位于 ASP.NET Core 模板中。由模板添加的 appsettings.json 文件配置应用程序的日志级别:

{"Logging": {"LogLevel": {"Default": "Information"}}
}

在 .NET 8 之前,弄清楚应用程序的配置值可能非常困难。配置支持多个提供程序,提供程序可以优先于其他提供的程序。例如,虽然默认始终使用 appsettings.json 中的值,但它们会被 appsettings.Development.jsonappsettings.Production.json 有条件地覆盖,具体取决于应用程序的发布方式。

在 .NET 8 中,现在调试 IConfiguration 会显示一个包含所有配置键和值的简单列表。优先级已计算过了,因此您看到的配置值就是应用程序将要使用的值。
.NET 7
在这里插入图片描述
.NET 8
在这里插入图片描述

更多信息

有太多的改进,无法一一详述以及列出它们。但预计 .NET 8 中的调试器可视化会有更多改进:

  • 依赖注入
  • ClaimsPrincipalClaimsIdentity
  • StringValuesStringSegment
  • HostStringPathStringQueryStringFragmentString
  • HTTP 标头集合
  • RouteValueDictionary
  • ASP.NET Core MVC 的 ModelState

现在就试试

.NET 8 调试增强功能现在已经在 .NET 8 RC1 中提供。您可以按照下面的步骤尝试一下,然后让我们知道您的想法:

  1. 下载最新的 .NET 8 版本。
  2. 启动 Visual Studio 2022(或您首选的 IDE)并创建 ASP.NET Core 或 Worker Service 应用程序。
  3. 设置断点并按 F5 运行应用程序并进行调试。

感谢您尝试 .NET 8 和 .NET 8 调试增强功能!


http://www.ppmy.cn/news/1147492.html

相关文章

创建一个基本的win32窗口

1.建立一个窗口的基本步骤 (1)向系统注册一个窗体类 (2)根据窗体类创建窗口 (3)进入消息循环 2.程序结构 (1)主函数的输入参数 int WINAPI WinMain( HISTANCE hInstance,//当前窗口的句柄 HINSTANCE hPr…

【Flutter学习】AppBar 和 PopupMenu

App Bar 可以视为页面的标题栏,在 Flutter 中用AppBar组件实现;Popup Menu 是弹出菜单,用PopupMenuButton实现。下面结合这两个组件说明其用法。 1. 代码实现 一个简单的AppBar实现代码如下: import package:flutter/material.…

抖音小店创业攻略,快速了解这些适合新手经营的类目

抖音小店是抖音平台上的一种新型电商形态,它允许用户在抖音上开设自己的小店,销售自己的商品。抖音小店的开设门槛低,成本也不高,因此很受新手创业者的青睐。那么,下面不若与众将介绍抖音小店中有哪些适合新手创业者经…

VueRouter与expres/koa中间件的关联

ueRouter: runQueue 路由守卫都是有三个参数to,from,next。其中next就是下方的fn执行时候传入的第二个参数(回调函数),只有该回调执行后才会挨个遍历queue内的守卫。 中间件的作用 隔离基础设施与业务逻辑之间的细节。详细的内容位于《深入浅出Node.js》P210 另外一…

DC/DC开关电源学习笔记(十二)Boost升压电路仿真及工程应用案例

(十二)Boost升压电路仿真及工程应用案例 1.Boost电路仿真案例2.Boost电路工程应用实例1.Boost电路仿真案例 指标参数:输入电压5V,输出电压12V,输出电流1A,开关频率10kHz,电压纹波0.5%。 根据输入指标参数确定CCM模式下各个关键元器件测参数: 负载电阻Rl=12R 占空比D=6…

草柴返利APP如何查询领取天猫内部隐藏优惠券购物拿天猫返利?

草柴返利APP是一种简单、快捷的购物省钱工具,可以帮助你在天猫上查询并领取内部隐藏优惠券,确认收货后拿购物返利。草柴返利APP可以轻松查询到天猫优惠券,让你购物更加方便,享受更多的折扣优惠。 草柴返利APP如何查询领取天猫优惠…

【Windows】RPC调用过程实例详解

概述:windows 创建 RPC调用过程实例详解 参考文章:Remote procedure call (RPC)(远程过程调用 (RPC)) - Win32 apps | Microsoft Learn 文章目录 0x01、生成 UUID 和模版(IDL)文件0x02、添加 acf 文件0x03、编译 idl 文件0x04、客…

根据前序遍历结果构造二叉搜索树

根据前序遍历结果构造二叉搜索树-力扣 1008 题 题目说明: 1.preorder 长度>1 2.preorder 没有重复值 直接插入 解题思路: 数组索引[0]的位置为根节点,与根节点开始比较,比根节点小的就往左边插,比根节点大的就往右…

黑群晖video station评级问题

黑群晖video station评级问题 环境 群晖Version: 6.2.3-25423video station 2.4.10方法1,py文件 登录ssh,获取sudo权限 cd /var/packages/VideoStation/target/plugins/syno_themoviedbsudo vim search.py替换movie_data[vote_average] 替换为 round(movie_data[vote_avera…

[NPUCTF2020]ezinclude 文件包含两大 getshell方式

PHP LFI 利用临时文件 Getshell 姿势 | 码农家园 说一下我的思路吧 robots没有 扫描发现存在 dir.php 然后404.html 报错 apache 2.18 ubuntu 这个又正好存在漏洞 所以前面全去看这个了 结果根本不是这样做。。。 正确的思路是这样 发现变量 认为是 name和 pass传递参数…

日志的详细说明

在Spring应用程序中,日志是指记录应用程序运行时信息的一种机制,通常以文本形式保存在文件中或通过其他适当的渠道显示。日志是开发和维护应用程序时非常重要的工具,用于记录应用程序的状态、错误、调试信息和性能数据,以便开发人…

沪深300期权一个点多少钱?

经中国证监会批准,深圳证券交易所于2019年12月23日上市嘉实沪深300ETF期权合约品种。该产品是以沪深300为标的物的嘉实沪深300ETF交易型指数基金为标的衍生的标准化合约,下文介绍沪深300期权一个点多少钱?本文来自:期权酱 一、沪深300期权涨…

Nacos 小bug: application.properties配置未生效,导致端口未生效

最近用了下nacos 1.4.6 ,发现windows 中修改配置中的启动端口未生效,其实就是配置文件没读取到。 去github 逛了一下issue ,参考这个:https://github.com/alibaba/nacos/issues/10217 这哥们儿是nacos 1.4.5 Linux系统下的相同问题,shell 中…

几种预训练模型微调方法和peft包的使用介绍

文章目录 微调方法Lora(在旁边添加训练参数)Adapter(在前面添加训练参数)Prefix-tuning(在中间添加训练参数)Prompt tuning PEFTPEFT 使用PeftConfigPeftModel保存和加载模型 微调方法 现流行的微调方法有:Lora,promp…

二叉搜索树--新增节点-力扣 701 题

例题细节二叉搜索树的基础操作-CSDN博客也讲过了&#xff08;put&#xff09;&#xff0c;下面给出递归实现 public TreeNode insertIntoBST(TreeNode node, int val) {//找到空位了if(node null) {return new TreeNode(val);}if(val < node.val) {//一直找到有null的位置…

【JQuery插件】手把手教你如何白瓢一个网站的全部付费资源!前端狂喜

视频讲解地址&#xff1a;https://www.bilibili.com/video/BV1bm4y157GF/ 网站地址&#xff1a;https://www.jq22.com/ 大家好&#xff0c;这一集给大家分享一个好用的JQuery插件网站&#xff0c;当然&#xff0c;更主要的是教大家如何白瓢这个网站上的资源&#xff0c;这个网…

ITSS云能力评估是什么?

一、ITSS云服务能力评估是什么为了提升云计算产品&#xff08;系统&#xff09;的服务能力&#xff0c;保证云计算服务质量&#xff0c;以GB/T 36326-2018《信息技术云计算云服务运营通用要求》等系列国家标准为依托&#xff0c;由中国电子工业标准化技术协会信息技术分会&…

C++ 命名空间-----namespace(超详细解析,小白必看系列)

目录 一、前言 &#x1f34e;什么是C 二、关键字 三、命名空间&#xff08;重点&#xff09; &#x1f350;C语言--命名冲突 &#x1f349;C--命名空间的定义 &#x1f353;C--命名空间的使用 四、C输入&输出 五、共勉 一、前言 既博主学过C语言后又一新的语言&a…

编程助手成为编程高手,帮您正则调试

官方下载地址&#xff1a;安果移动 视频演示地址&#xff1a;编程助手-正则调试与面试题&#xff0c;升职加薪不是梦_哔哩哔哩_bilibili 编程助手成为编程高手&#xff0c;帮您正则调试 软件介绍版本号 1.0.2更新日期 2023-10-11 找工作不敢谈薪资&#xff1f;总觉得公司欠我…

力扣 354. 俄罗斯套娃信封问题(动态规划问题)

354. 俄罗斯套娃信封问题 - 力扣&#xff08;LeetCode&#xff09; 给你一个二维整数数组 envelopes &#xff0c;其中 envelopes[i] [wi, hi] &#xff0c;表示第 i 个信封的宽度和高度。 当另一个信封的宽度和高度都比这个信封大的时候&#xff0c;这个信封就可以放进另一…