.NET 6 预览版 7:新功能已完成 ,将专注于改进

2021-08-19 14:07:28 浏览数 (1)

.NET 团队的项目经理 Richard Lander在宣布 .NET 6 Preview 7 时说:“这是 .NET 预览的又一季的结束。”, 中文翻译:.NET 6 预览版 7 发布——最后一个预览版。 .NET 6.0 是微软统一 .NET 平台的一个重要版本和第一个 LTS(长期支持)迭代,旨在取代 .NET Framework(现在是旧版)和 .NET Core。最新的预览版附带了大量信息,包括 Visual Studio 2022 预览版 3、.NET MAUI(多平台应用程序 UI)预览版 7——它取代了跨平台移动项目的 Xamarin——以及对 ASP.NET Core 的更新。

Richard Lander 说新功能基本上都已经完成,开发团队现在专注于改进,因为它解决了两个可能在 11 月全面上市之前用于生产的候选版本。自从 .NET 6 自预览版 1 以来一直在支持 Microsoft 的关键应用——Bing.com 和 .NET 网站。现在,随着下个月RC1的发布,会有更多的组织开始采用.NET 6。 开源项目ABP vNext 的5.0 版本开始已经开始,这个版本的一个重要目标就是升级到使用.NET 6,具体参见:https://docs.abp.io/en/abp/latest/Road-Map。

Lander 在 8 月 10 日的博客文章中说:“我们正在与各个团队(Microsoft 和其他团队)就将 .NET 6 RC 投入生产进行沟通。” 他邀请有兴趣采用 .NET 6 进行生产的组织与 Microsoft 联系以获取详细信息和指导。为生产工作负载做好准备,开发团队现在专注于最后的润色改进,按照 .NET 主题计划(主题网站:https://themesof.net/)将所有内容提升到统一的高品质水平:

Lander 表示,最后一次预览特别重要, .NET 团队成员在 RC 完善阶段之前努力工作以添加新功能,同时平衡以下优先级:

  • 每个版本都添加了很多功能以提供新的价值。
  • 新版本是高质量的。
  • 根据我们每年 11 月的时间表发布正式版。

就预览版 7 中的新功能而言,有些得到了改进,而有些则是“大而全的发布功能”。 例如大家期待已久的HTTP/3/Quc的支持, 预览版 7 在 Kestrel 中引入了对 HTTP/3 和 QUIC 的早期支持,以供试用并提供反馈,HTTP/3 是 HTTP 的第三个也是即将推出的主要版本。HTTP/3 使用与 HTTP/1.1 和 HTTP/2 相同的语义:相同的请求方法、状态代码和消息字段适用于所有版本。不同之处在于底层传输。HTTP/1.1 和 HTTP/2 都使用 TCP 作为它们的传输。HTTP/3 使用了一种与 HTTP/3 一起开发的新传输技术,称为 QUIC。 具体参见ASP.NET Core的预览版7更新:https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-6-preview-7/。

还有.NET SDK模板 也做了大量的更新,把c#语言的9.0 版本最新功能引入,以充分利用最新的C# 语言用法,比如代码生成器、编译时反射、顶级语句等,c# 10版本还在预览版,要了解C# 10的完整特性,可以阅读文章:C# 10 完整特性介绍。 顶级语句这个功能在博客下方引起了争论,Lander 博客评论中提出的几个问题,以及他的回答:

  • 问: “我知道 C# 正试图与 Python 和 JavaScript 竞争以吸引年轻开发者的注意力,但你们能不能不要删除专家模板?” Lander: “不是那样的。这些模板植根于(至少)40 年前的模型中。它们不以专业知识为中心。这更像是旧学校/新学校。当然,我们确实相信这些模板将使对于熟悉 Python 或 JavaScript 或完全不熟悉编程的人来说,学习 C# 更容易。也许这这个改变的一半原因。另一半是当前的模板没有承载它们的重量,而且也很混乱。我已经有了多次查找 AsyncMain 的语法(即使它是微不足道的),顶级语句消除了整个问题
  • 问: “因此,根据我从您提供的链接中收集到的信息,这仅适用于‘简单程序和新程序员’。是否有可用的配置选项,或者您是否将其强加给我们所有人?” Lander: “是什么让你得出这个结论?顶级语句模型几乎实现了‘经典’模型的所有功能。它绝对超越了简单程序和新程序员。这是一个很好的例子,一个非简单程序:https://github.com/dotnet/iot/blob/main/src/devices/Pn532/samples/Program.cs。除了该程序演示的内容之外,您还期望做什么?”

除了顶级语句之外,SDK 包含的项目模板中默认使用或启用的其他语言功能包括:

  • 全局 using 指令(通过SDK 驱动的默认值)
  • 文件范围的命名空间(编译器跟踪问题)
  • 目标类型new表达式
  • 异步主
  • 可空引用类型

说到最后一项,可空引用类型,开发人员现在可以使用新的 Reflection API 来检查它们,这些 API从 Reflection 公开顶级可空性信息,帮助他们表达是否可以构建给定的引用类型并确定参数和返回值的可空性性质对于给定的方法。

System.Text.Json 在多个方面进行了改进,包括控制属性序列化顺序的新功能。此外,它的序列化程序现在将通知作为(反)序列化操作的一部分公开。

除了对库的大量其他调整和更多新功能之外,早期的 .NET 7 功能可在预览中使用,例如允许在接口中使用static abstract声明成员。“,现在可以实现代数泛型方法,”Lander谈到开发static abstract人员在接口中定义方法——包括运算符——的新能力。“对于某些人来说,此功能将是我们今年提供的绝对出色的改进。它可能是自 Span<T> 以来最重要的新型系统功能。”, 软件工程师 Tanner Gooding 解释说:“您现在可以声明同时是静态和抽象的接口成员。” 这实现了他所说的 .NET 中长期要求的特性,“在泛型类型上使用运算符的能力”。专门写了一篇博客文章介绍通用数学。

至于其他库的改进,以下是更多信息的链接:

  • NativeMemory的API - “新的本机内存分配 API,“通过 System.Runtime.InteropServices.NativeMemory 公开”,这些API代表等同于mallocfreerealloc,和callocÇAPI和还包括用于对准做分配的API。”
  • 同步流重载JsonSerializer——“我们添加了新的同步 API,JsonSerializer用于将 JSON 数据序列化和反序列化到/来自流。”
  • System.Diagnostics Propagators - 这与以正确格式生成网络标头以支持OpenTelemetry 有关。该团队正在采用传播远通用标头自定义模型。
  • 加密操作的简化调用模式——新的简化加密和解密方法提供了一种使用加密 API 的直接方法,特别是当加密/解密有效负载已经在内存中并且没有被流式传输时。
  • 全球化不变模式下的完整大小写映射支持——“我们改进了全球化不变模式以支持完整 Unicode 字符集的大小写映射。”

Richard Lander说.NET 6.0 将包括不支持生产的预览功能。对于 .NET 6,“我们已经构建了将 API 标记为‘预览中’的功能,这些是选择加入,使用 EnablePreviewFeatures 项目属性和对 System.Runtime.Experimental 的引用。这些功能可能会发生重大变化,因此仅用于测试和实验。

Lander 说:“我们继续希望并依赖您的反馈。我们将把 .NET 6 的其余部分集中在回归上(功能和性能)以及在新功能中发现的错误。在大多数情况下,功能改进需要等待 .NET 7。请分享您的任何和所有反馈,我们很乐意对其进行分类。”

Visual Studio 也已更新, Visual Studio 2022 的预览版 3 添加了新的项目属性设计器、改进的深色主题和新的项目类型,以支持使用 TypeScript 或 JavaScript 的 React 和 Vue.js。另一个新功能是能够在单个解决方案中使用多个 Git 仓库。

Visual Studio 2019 也更新到 16.11,高级项目经理 Mads Kristensen表示这是最后一次基线更新。因此,“我们鼓励企业和专业客户在 Visual Studio 2019 16.11 上实现标准化,”新功能包括 .NET 应用程序的热重载(查看动态代码更改的输出)、改进的 Git 工具以及将 Clang/LLVM 工具链更新到版本 12。

0 人点赞