乐趣区

关于c#:NET候选版本2发布

本文作者为 Jon Douglas、Jeremy Likness 和 Angelos Petropoulos

明天,咱们发表推出 .NET 7 Release Candidate 2。这是 .NET 7 的最终候选版本(RC),并在生产环境中失去反对。

您能够下载实用于 Windows、macOS 和 Linux 的 .NET 7 Release Candidate 2。

  • 安装程序和二进制文件
  • 容器图像
  • Linux 软件包
  • 发行阐明
  • 已知的问题
  • GitHub 问题跟踪器

.NET 7 Release Candidate 2 已通过 Visual Studio 17.4 Preview 3 测试。如果您想在 Visual Studio 系列产品中试用 .NET 7,咱们建议您应用预览通道构建。如果您应用的是 macOS,咱们倡议应用最新的 Visual Studio 2022 for Mac 预览版。

不要遗记 .NET Conf 2022。在 2022 年 11 月 8 日至 10 日与咱们一起庆贺 .NET 7 的公布!

在本博客中,咱们将重点介绍 .NET 7 的外围主题,并为您提供深刻理解细节的资源。

C# 11

C# 11 是 C# 的最新版本,当初可在 .NET 7 中应用。

咱们在设计和开发 C# 中。您能够退出咱们的 CSharpLang 存储库以查看最新的 C# 性能提案和会议记录。打算工作后,您能够通过咱们的性能状态页面监控进度。要理解无关 C# 11 的更多信息,请查看以下内容:

  • C# 11 性能的晚期预览
  • C# 11 预览更新 – 原始字符串文字、UTF-8 等
  • C# 11 预览:通用数学、必须成员等
  • C# 11 中的新性能

留神:若要试用 C# 11 预览版性能,请创立一个 C# 我的项目并将 LangVersion 设置为 Preview。

.NET 库在不断改进。会定期增加蕴含全新性能的新 API。现有 API 正在进行性能改良,只需降级即可使您受害。正在建造全新的库,以帮助您实现日常工作。这些博客中介绍了许多 .NET 库加强性能,但不要遗记深入研究这些库:

  • .NET 6 中的预览性能 – 通用数学
  • .NET 7 Preview 5 – 通用数学
  • .NET 7 中的正则表达式改良
  • 发表推出 .NET 的速率限度

SDK

每个 .NET 版本都蕴含对 .NET SDK 的大量改良,包含用于创立、生成和治理 .NET 我的项目的外围性能。许多加强性能已蕴含在您能够浏览的以前的预览博客中。要理解无关新 SDK 性能的更多信息,请参阅以下内容:

  • 发表推出对 .NET SDK 的内置容器反对
  • 地方包治理简介

如何为 System.Text.Json 源生成从新启用反射回退

.NET 7 引入了一项有意义的重大更改,该更改删除了 System.Text.Json 源生成器中基于反射的序列化的静默回退。依据咱们从客户那里收到的晚期反馈,仿佛有不少用户(大部分是偶尔的)依赖回退行为。

即便曾经记录了重大更改的解决办法,它依然须要代码更改,这在某些状况下是不可能的。从 .NET 7 RC 2 开始,您能够应用提供的 AppContext 兼容性开关在全局范畴内从新启用反射回退。将以下条目增加到应用程序的我的项目文件中,以从新启用应用程序中所有源构建上下文的反射回退:

<ItemGroup>
  <RuntimeHostConfigurationOption 
Include="System.Text.Json.Serialization.EnableSourceGenReflectionFallback" 
Value="true" />
</ItemGroup>

无关应用 AppContext 开关的详细信息,请参阅无关 .NET 运行时配置设置的文章。

新分析器用于帮忙您以正确形式应用 API

正确实现通用数学接口

dotnet/runtime#69775

确保应用奇怪递归模板模式 (CRTP) 的 .NET 通用数学接口在用户代码中正确实现。特地是,如果实现 .NET 通用数学接口(实现 CRTP 架构)的类型未应用类型自身填充泛型类型参数,它将收回正告。

例如:

public readonly struct DateOnly : IParsable<DateOnly> // correct implementation of IParsable<TSelf> interface
{...}
public readonly struct MyDate : IParsable<DateOnly> // Warns: "The'IParsable<TSelf>'requires the'TSelf'type parameter to be filled with the derived type'MyDate' " the type parameter TSelf
{...} 

避免内置运算符中的行为更改 IntPtr 和 UIntPtr

dotnet/runtime#74022

.NET 7 中为 System.IntPtr 和 System.UIntPtr 增加的一些内置运算符的行为与 .NET 6 及更低版本中用户定义的运算符不同。一些过来在溢出时抛出未经查看的上下文的运算符当初不再抛出,除非被包装在查看的上下文中,而一些以前不用于在查看的上下文中抛出的运算符当初会在溢出时抛出,除非被包装在未经查看的上下文中。分析器检测可能导致这些行为变动的代码并告诉它。

例如:

checked
{
    intPtr2 = intPtr1 + 2; // Warns: "Starting with .NET 7 the operator'+'will throw when overflowing in a checked context. Wrap the expression with an'unchecked'statement to restore the .NET 6 behavior."

    intPtr2 = intPtr1 - 2; // Warns: "Starting with .NET 7 the operator'-'will throw when overflowing in a checked context. Wrap the expression with an'unchecked'statement to restore the .NET 6 behavior."

    void* ptr = (void*)intPtr1; // Warns: "Starting with .NET 7 the explicit conversion'(void*)IntPtr'will throw when overflowing in a checked context. Wrap the expression with an'unchecked'statement to restore the .NET 6 behavior."

    intPtr2 = (IntPtr)ptr; // Warns: "Starting with .NET 7 the explicit conversion'(IntPtr)void*'will throw when overflowing in a checked context. Wrap the expression with an'unchecked'statement to restore the .NET 6 behavior."
}

intPtr1 = (IntPtr)longValue; // Warns: "Starting with .NET 7 the explicit conversion'(IntPtr)Int64'will not throw when overflowing in an unchecked context. Wrap the expression with a'checked'statement to restore the .NET 6 behavior."

int a = (int)intPtr1; // Warns: "Starting with .NET 7 the explicit conversion'(Int32)IntPtr'will not throw when overflowing in an unchecked context. Wrap the expression with a'checked'statement to restore the .NET 6 behavior."

贡献者聚光灯

非常感谢咱们所有的社区成员。咱们十分感谢您的周到奉献。咱们请贡献者 @a74nh 分享他的想法。

Alan Hayward

用 Alan 本人的话说:我是 Alan Hayward,我住在英国曼彻斯特郊外。

我对 .NET 及其生态系统还很生疏,但我在做编译之类的事件方面有着悠久的历史。在我职业生涯的晚期,我曾在一家生产名为 QuickTransit 的 DBT 的初创公司工作——更好地称为 Apple 的 Rosetta(从他们从 PPC 迁徙到 X86 时回来)——但我更关怀它在架构中鲜为人知的应用程序:SPARC Solaris 到 X86/Itanium/PPC Linux 和 X86 Linux 到 MIPS/PPC/SPARC/Z Linux,可能还有更多的组合当初曾经隐没在工夫的迷雾中。

2014 年,我退出了 Arm 的新曼彻斯特英国办事处,致力于为 GCC 和 GDB 增加 SVE 反对,而后成为 GDB 的 Arm/AArch64 维护者。明天我退出了 Arm 的运行时团队,钻研风行的云和桌面运行时的性能和安全性。有一段时间我从事 OpenJDK 和 Graal 工作,包含增加对 Arm 的指针身份验证 (PAC) 平安性能的反对,以爱护 OpenJDK 中的控制流。我最近始终在与 .NET 上的一些团队单干——让咱们加快速度,应用外在函数改良一些库例程,并为 Ryujit 增加一个 If Conversion pass。我很快乐看到咱们能够对 Arm64 端口进行一些改良。

我喜爱 .NET 的哪些方面?我喜爱 C# 的简略性——您能够疾速轻松地实现工作(每个会编程的人都能够用 C# 编程)。同样,Jit 自身在利用编译器技术的形式上也很直观。最初,对 SuperPMI 示意敬意——这是我心愿在以前的我的项目中领有的工具,可能疾速取得测试套件之间的差别真是太棒了。

当我不工作时,常常会发现我用小画笔试图改善我的微型画,听太多的播客和有声读物。

我很快乐能成为其中的一员,非常感谢迄今为止与我互动过的社区中的人们,并心愿随着工夫的推移与更多人单干。

反对

.NET 7 公布时提供规范反对。只管这是以前称为“以后”的新名称,但反对持续时间没有扭转。奇数 .NET 版本公布时提供 18 个月的规范反对。长期反对(LTS)的名称或期限没有变动,仍继续 36 个月。无关更多详细信息,请参阅咱们的 .NET 和 .NET Core 反对生命周期文档。

路线图

.NET 版本包含代表 Microsoft 外部和内部多个团队之间合作的产品、库、运行时和工具。您能够通过浏览产品路线图理解无关这些畛域的更多信息:

  • ASP.NET Core 7 and Blazor Roadmap
  • EF 7 Roadmap
  • ML.NET
  • .NET MAUI
  • WinForms
  • WPF
  • NuGet
  • Roslyn
  • Runtime

咱们感谢您对 .NET 的所有反对和奉献。请尝试应用 .NET 7 Release Candidate 2,并通知咱们您的想法!

无关 .NET 7 Release Candidate 2 中蕴含的所有性能和改良的具体概述,请查看之前的 .NET 7 预览版博客文章:

  • 发表公布 .NET 7 预览版 1
  • 发表公布 .NET 7 预览版 2
  • 发表公布 .NET 7 预览版 3
  • 发表公布 .NET 7 预览版 4
  • 发表公布 .NET 7 预览版 5
  • 发表公布 .NET 7 预览版 6
  • 发表公布 .NET 7 预览版 7
  • 发表公布 .NET 7 候选版本 1

留神:请花一点工夫从新拜访“发表公布 .NET 7 Release Candidate 1”博客,因为脱漏了一些令人兴奋的性能。

点击试用 .NET 7 Release Candidate 2~

退出移动版