.NET 8 中的调试增强功能

news2024/11/19 4:25:47

作者: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.coloradmin.cn/o/1081861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cdsn目录处理:```,```# 目录校正

原标题 <small> cdsn目录处理&#xff1a; &#xff0c;中间添加 # 空格 空行后 遇到的底部空行出错&#xff0c;书接上回&#xff0c;处理空行【python查找替换&#xff1a;查找空行&#xff0c;空行前后添加&#xff0c;中间添加 # 空格 空行后遇到的第1行文字&am…

React 组件传 children 的各种方案

自定义组件的时候往往需要传 children&#xff0c;由于写法比较多样&#xff0c;我就总结了一下。 方案列表 1. 类组件1.1 类组件&#xff0c;不使用解构1.2 类组件&#xff0c;使用解构 2. 函数组件2.1 函数组件&#xff0c;不使用解构2.2 函数组件&#xff0c;外部解构2.3 函…

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

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

WPF 窗口白屏问题分析与初步解决

环境描述 开发环境&#xff1a; Windows 11 Visual Studio 2022 .NET Framework 4.8 目标电脑环境 Windows10 默认包含了 .NET Framework 4.8 现象 编译好的WPF应用程序&#xff0c;是基于 .NET Framework 4.8开发的&#xff0c;在大部分电脑上可以正常使用。在某个客…

Python算法练习 10.11

leetcode 394 字符串解码 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的&#xff1b;输入字符串中没…

湖南首个,万应低代码软件技术专业校企共建基地落成!

导语 9月开学季&#xff0c;湖南省民族职业学院教育技术学院迎来了近5000名新生&#xff0c;而其中软件技术专业的205名新生尤为引人注目——他们是这个校企共建专业的第一批学生&#xff0c;也是学院软件技术专业新型校企合作的第一批受益者。 湖南首个 万应低代码软件技术…

10_11C++

思维导图 #include <iostream>using namespace std; class Person { private:string name; protected:int age; public:char sex; public:Person() {cout << "父类无参构造函数" << endl;}Person(string n,int a,char s):name(n),age(a),sex(s){co…

[译]Sentry:如何从数据存储中获得更强的一致性

翻译自&#xff1a;How to Get Stronger Consistency Out of a Datastore 地址&#xff1a;https://blog.sentry.io/2019/09/17/how-to-get-stronger-consistency-out-of-a-datastore Sentry的首要工作是接收、解析用户的异常信息。当用户异常信息大量上报时&#xff0c;Sentry…

Linux部署kubeedge 1.4

文章目录 一、机器信息二、环境准备&#xff08;所有节点操作&#xff09;2.1. 修改主机名2.2. 开启路由转发2.3.安装Docker&#xff08;所有节点&#xff09;2.4.部署K8S集群(单机版&#xff0c;云端节点) 2.5.安装Mosquitto&#xff08;只在边缘节点安装)三、安装kubeedge 1.…

数据库基础篇二

函数 约束 概述 概念&#xff1a;约束是作用于表字段上的规则&#xff0c;用于限制存储在表中的数据。目的&#xff1a;保证数据库中数据的正确、有效性和完整性。分类&#xff1a; 外键约束 外键用来让两张表的数据之间建立连接&#xff0c;从而保证数据的一致性和完整性…

2023全国大学生软件测试大赛开发者测试练习题满分答案(PairingHeap2023)

2023全国大学生软件测试大赛开发者测试练习题满分答案&#xff08;PairingHeap2023&#xff09; 题目详情题解代码&#xff08;直接全部复制到test类中即可&#xff09; 提示&#xff1a;该题只需要分支覆盖得分即可&#xff0c;不需要变异得分 题目详情 题解代码&#xff08;…

Kubernetes使用OkHttp客户端进行网络负载均衡

在一次内部Java服务审计中&#xff0c;我们发现一些请求没有在Kubernetes&#xff08;K8s&#xff09;网络上正确地实现负载均衡。导致我们深入研究的问题是HTTP 5xx错误率的急剧上升&#xff0c;由于CPU使用率非常高&#xff0c;垃圾收集事件的数量很多以及超时&#xff0c;但…

linux开发环境下出现Segmentation fault问题排查一

一、检测代码中是否有数组越界情况 更改以上数组为128*60后&#xff0c;正常。确认是数组溢出导致越界。 二、分析&#xff1a;一般情况下打印的字符刚好在50以内&#xff0c;但是在其它状态下测试&#xff0c;数据字符数据增加从而导致溢出 打印命令如下&#xff1a; sprin…

2.线性表——数据结构学习

零个或多个数据元素的有限序列。 有序 &#xff08;每个元素有且只有一个前驱与后继&#xff09; -> 一对一的关系 前驱 &#xff08;第一个元素无前驱&#xff09;后继&#xff08;最后一个元素无后继&#xff09; 有限 线性表元素个数&#xff1a;n (n ≥ \geq ≥ 0)&a…

D1s芯片启动流程(BROM System)分析

1、D1S芯片介绍 2、BROM介绍 &#xff08;1&#xff09;BROM&#xff08;boot rom&#xff09;&#xff1a;存放启动代码的ROM&#xff0c;该ROM一般在芯片内部集成&#xff0c;是芯片上电执行的最开始代码&#xff1b; &#xff08;2&#xff09;BROM里存放的程序主要功能&…

【Java 进阶篇】JavaScript 介绍及其发展史

JavaScript是一门广泛应用于Web开发的编程语言。它是一种高级的、解释性的脚本语言&#xff0c;主要用于改善用户与Web页面的互动体验。本篇博客将为你详细介绍JavaScript的基础知识、历史背景和它在Web开发中的重要作用。我们还将讨论JavaScript的发展史&#xff0c;从它的起源…

9. 一个SpringBoot项目运行

新手如何运行一个SpringBoot项目 1.SpringBoot项目运行 新创建的SpringBoot项目如何运行 2.启动lombok注解 点击该按钮&#xff0c;启动lombok注解支持 3.展示说明

进阶JAVA篇-Object类与Objects类、包装类的常用API(一)

目录 API 1.0 API概念 2.0 Object类的常用API 2.1 Object 中的 tostring() 方法 表示返回对象的字符串表达形式 2.2 Object 中的 equals(Object o) 方法 &#xff0c;判断两个对象的是否相等 2.2.1深入了解如何重写Object 中的 equals(Object o) 方法 2.2.2 对重写Object 中的…

html css实战之学成在线项目

html css实战之学成在线项目 项目链接&#xff1a;https://download.csdn.net/download/weixin_39451323/88416213 效果图&#xff1a;

4年测试经验,面试却突破不了20K,真是太卷了····

先说一个插曲&#xff1a;上个月我有同学在深圳被裁员了&#xff0c;和我一样都是软件测试&#xff0c;不过他是平安外包&#xff0c;所以整个组都撤了&#xff0c;他工资和我差不多都是14K。 现在IT互联网已经比较寒冬&#xff0c;特别是软件测试&#xff0c;裁员先裁测试&am…