• .NET 8 中的调试增强功能


    作者: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"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在 .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 调试增强功能!

  • 相关阅读:
    刘锦程荣获2022年度中国电商行业创新人物奖
    Oracle故障案例之-19C时区补丁DSTV38更新
    代码随想录第三十天|无重叠区间| 划分字母区间| 合并区间
    ubuntu 20.04 + 3090Ti 深度学习装机 (Nvidia-显卡驱动-515.57 + CUDA-11.7 + cuDNN-8.4.1)
    TLS及CA证书申请流程
    深证成指399001行情数据API接口
    金九银十躺平证!全靠这份2022阿里扫地僧分享的Java面试小册,轻松拿捏
    【机器学习】正则化到底是什么?
    python开发面试-20240715
    LOSER的预习笔记——————————清除setlinterval定时器
  • 原文地址:https://blog.csdn.net/MicrosoftReactor/article/details/133780151