.NET 8 中的调试增强功能
作者:James Newton-King
排版:Alan Wang
开发人员喜欢 .NET 强大且用户友好的调试体验。您可以在您选择的 IDE 中设置断点,启动已经附加上调试器的程序,逐步执行代码并查看 .NET 应用程序的状态。
在 .NET 8 中,我们致力于改善 .NET 应用中常用类型的调试体验。这些包括:
HttpContext和其朋友WebApplication- MVC and Razor Pages
- gRPC
- 端点元数据
- 日志
- 配置
您不需要深入了解这些类型的内部结构就可以找到有关应用程序的信息。我们为常用的 .NET 类型添加了自定义调试属性的功能来显示调试摘要以及提供简化的调试代理。
HttpContext 和其朋友
HttpContext、HttpRequest 和 HttpResponse 对于使用 ASP.NET Core 构建 Web 应用程序的开发人员来说是非常熟悉的。如果您想查看 HTTP 请求的状态,那么您需要调试这些类型。
我们审查了 ASP.NET Core 的 HTTP 类型的属性,以便它们更容易与调试器一起使用。查看请求和响应值(例如标头、cookie、查询字符串和表单值)变得更加容易,现在 HttpRequest 和 HttpResponse 还显示了用户友好的类型摘要,像 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.json 或 appsettings.Production.json 有条件地覆盖,具体取决于应用程序的发布方式。
在 .NET 8 中,现在调试 IConfiguration 会显示一个包含所有配置键和值的简单列表。优先级已计算过了,因此您看到的配置值就是应用程序将要使用的值。
.NET 7

.NET 8

更多信息
有太多的改进,无法一一详述以及列出它们。但预计 .NET 8 中的调试器可视化会有更多改进:
- 依赖注入
ClaimsPrincipal和ClaimsIdentityStringValues和StringSegmentHostString,PathString,QueryString和FragmentString- HTTP 标头集合
RouteValueDictionary- ASP.NET Core MVC 的
ModelState
现在就试试
.NET 8 调试增强功能现在已经在 .NET 8 RC1 中提供。您可以按照下面的步骤尝试一下,然后让我们知道您的想法:
- 下载最新的 .NET 8 版本。
- 启动 Visual Studio 2022(或您首选的 IDE)并创建 ASP.NET Core 或 Worker Service 应用程序。
- 设置断点并按 F5 运行应用程序并进行调试。
感谢您尝试 .NET 8 和 .NET 8 调试增强功能!
相关文章:
.NET 8 中的调试增强功能
作者:James Newton-King 排版:Alan Wang 开发人员喜欢 .NET 强大且用户友好的调试体验。您可以在您选择的 IDE 中设置断点,启动已经附加上调试器的程序,逐步执行代码并查看 .NET 应用程序的状态。 在 .NET 8 中,我们致…...
1310. 数三角形
知识点:(a, b)与(c, d)两点连线上点的个数为:gcd(x, y) 1(包括端点) (设横坐标差的绝对值为x, 纵坐标差的绝对值为y ) 思路:先算出选三个点的所有情况,再减去三点共线的情况 共线的斜率为0时特判 当共线…...
数据库基础(一)
数据库面试基础 注,本文章内容主要来自于JAVAGUIDE,只是结合网上资料和自己的知识缺陷进行一点补充,需要准备面试的请访问官方网址。 一、范式 参考链接 函数依赖:一张表中,确定X则必定能确定Y,则X->…...
Factory-Method
Factory-Method 动机 在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具…...
【C++】神奇字符串(力扣481)
神奇字符串的规律: 神奇字符串 s 仅由 ‘1’ 和 ‘2’ 组成,并需要遵守下面的规则: 神奇字符串 s 的神奇之处在于,串联字符串中 1 和 2 的连续出现次数可以生成该字符串。 s 的前几个元素是 s “1221121221221121122……” 。如果…...
elasticsearch索引的数据类型以及别名的使用
在上篇文章写了关于elasticsearch索引的数据类型,这里就详细说下索引的增删改查以及其他的一些操作吧。 1、索引的增、删、改、查 先新建一个索引结构,代码如下 PUT test-3-2-1 {"mappings": {"properties": {"id": {&…...
分布式锁2:基于redis实现分布式锁
一 redis实现分布式锁 1.1 原理 setnxexpiredel 命令实现redis的分布式锁;其中 setnx 不存在则新增;存在则忽略。即先用setnx来抢锁,如果抢到之后,再用expire给锁设置一个过期时间,防止锁忘记了释放。例如…...
【Vue面试题十六】、Vue.observable你有了解过吗?说说看
文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:Vue.observable你有了解…...
Centos7使用nginx搭建rtmp流媒体服务器
为什么写这篇文章 2023年10月份,公司系统中有个需求,需要使用摄像头记录工程师在维修设备时的工作状态,找到了一家做执法记录仪的厂商,通过厂商发过来的文档了解到该执法记录仪支持通过rtmp协议推流至服务器,第一次接…...
Springboot+vue4S店车辆管理系统(有报告),Javaee项目,springboot vue前后端分离项目。
演示视频: Springbootvue4S店车辆管理系统(有报告),Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的4S店车辆管理系统,采用M(…...
Docker与Serverless计算的集成: Docker容器如何与Serverless计算结合。
文章目录 1. Docker容器的可移植性2. Serverless计算的自动伸缩性3. 使用Serverless与Docker容器a. 自托管Serverless平台b. 使用容器服务 4. 使用案例:图像处理服务5. 结论 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉…...
Linux下kibana的安装与配置
1. 环境配置 确保Linux服务器上已安装Java 8或更高版本。可以通过运行 java -version 来验证Java的版本。 下载Kibana 7.17.11的压缩文件,可以从Kibana 7.17.11下载 上传服务器,并解压Kibana压缩文件。 2. Kibana配置 编辑Kibana的配置文件 config/k…...
LuatOS-SOC接口文档(air780E)-- http - http 客户端
示例 -- 使用http库,需要引入sysplus库, 且需要在task内使用 require "sys" require "sysplus"sys.taskInit(function()sys.wait(1000)local code,headers,body http.request("GET", "http://www.example.com/abc").wait()log.info(…...
分布式文件服务器——初识MinIO
开篇 MinIO ——开源优秀的分布式对象存储系统。 适用于AI的 高性能分布式云存储 MinIO 提供高性能、与S3 兼容的对象存储系统,让你自己能够构建自己的私有云储存服务。 MinIO原生支持 Kubernetes,它可用于每个独立的公共云、每个 Kubernetes 发行版、私…...
中国34省级行政区及行政区划代码
一、34省级行政区 23个省、4个直辖市、2个特别行政区、5个自治区。 行政区行政区划代码北京市110000天津市120000河北省130000山西省140000内蒙古自治区150000辽宁省210000吉林省220000黑龙江省230000上海市310000 江苏省320000 浙江省330000 安徽省340000 福建省…...
vue、uniapp实现组件动态切换
在Vue中,通过使用动态组件,我们可以实现组件的动态切换,从而达到页面的动态展示效果。 vue 中 component组件 is属性 功能描述 例如:有多个tabs标签,如:推荐、热点、视频等。用户点击标签就会切换到对应组…...
JVM 虚拟机面试知识脑图 初高级
导图下载地址 https://mm.edrawsoft.cn/mobile-share/index.html?uuid3f88d904374599-src&share_type1 类加载器 双亲委派模型 当一个类收到类加载请求,它首先把类加载请求交给父类(如果还有父类,继续往上递交请求).如果父类无法加载该类,再交给子类加载 防止内存中出现…...
PointRend: 将图像分割视为渲染——PointRend:Image Segmentation as Rendering
0.摘要 我们提出了一种新的方法,用于高效、高质量的对象和场景图像分割。通过将经典的计算机图形学方法与像素标记任务中面临的过采样和欠采样挑战进行类比,我们开发了一种将图像分割视为渲染问题的独特视角。基于这个视角,我们提出了PointRe…...
【k8s】ingress-nginx通过header路由到不同后端
K8S中ingress-nginx通过header路由到不同后端 背景 公司使用ingress-nginx作为网关的项目,需要在相同域名、uri,根据header将请求转发到不同的后端中在稳定发布的情况下,ingress-nginx是没有语法直接支持根据header做转发的。但是这个可以利…...
LuatOS-SOC接口文档(air780E)-- httpsrv - http服务端
httpsrv.start(port, func)# 启动并监听一个http端口 参数 传入值类型 解释 int 端口号 function 回调函数 返回值 返回值类型 解释 bool 成功返回true, 否则返回false 例子 -- 监听80端口 httpsrv.start(80, function(client, method, uri, headers, body)-- m…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
