宣布 .NET 6 Preview 6
Richard 2021 年 7 月 14 日
我们很高兴发布 .NET 6 Preview 6。Preview 6 是我们进入 RC 时期之前的倒数第二个预览版。将有两个 RC 版本。此版本本身相对较小,而 Preview 7 会更大一些。在那之后,我们将进行质量修复,直到 11 月的最终版本。我们期待一个非常好的新的 .NET 版本。
您可以下载适用于 Linux、macOS 和 Windows 的.NET 6 Preview 6。
安装程序和二进制文件
容器镜像
Linux 软件包
发行说明
API 差异
已知的问题
GitHub 问题跟踪
有关 Web、数据访问和客户端方案的新增功能更多详细信息,请参阅 ASP.NET Core、EF Core 和 .NET MAUI 帖子。
从 .NET 6 Preview 6 开始,我们已经测试并支持了Visual Studio 2022 Preview 2,Visual Studio 2022使您能够利用为 .NET 6 开发的 Visual Studio 工具,例如在 .NET MAUI 中进行开发、用于 C# 应用程序的热重载、用于 WebForms
的新 Web 实时预览以及您的 IDE 体验中的其他性能改进。.NET 6 还通过 Visual Studio for Mac 8.9 进行了测试。
查看新的对话帖子,以深入了解工程师对最新 .NET 功能的讨论。
x64 仿真更新
我们已经完成了对 macOS 的 Apple Silicon 和 Windows 的 Arm64 的支持。剩下的就是在macOS Apple Silicon和Windows Arm64上支持 x64 仿真。我们需要做两件事来实现这一点。
Side By side 安装程序
以 .NET CLI为目标的一流架构(主要)支持在所有场景中使用原生架构 SDK。
在可以使用 side by side 安装程序之前(不久在 .NET 6 中),您需要安装所有 x64 版本或所有 Arm64 版本。如果要切换,需要卸载/删除 Arm64 机器上的所有 .NET 版本。这是不幸的,但这是我们现在所处的位置。
工具:.NET SDK 可选工作负载改进
我们添加了三个新的工作负载命令,可实现更好的发现和管理。
dotnet workload search
— 列出可安装的工作负载。dotnet workload uninstall
— 如果不再需要工作负载,请删除指定的工作负载。也是节省空间的好选择。dotnet workload repair
重新安装您之前安装的所有工作负载。
如果您的安装因互联网连接断开而在中间失败,这将非常有用。
可选工作负载由多个工作负载包组成,您可能已经进入这样一种状态,其中一些安装成功,而另一些安装失败。
在之前的预览中,我们添加了以下命令:
dotnet workload install
— 安装工作负载。dotnet workload list
— 列出已安装的工作负载。dotnet workload update
— 更新已安装的工作负载。
库:TLS 支持 System.DirectoryServices.Protocols
对于 Linux 和 MacOS System.DirectoryServices.Protocols
TLS支持已经启用了。它也已经为 Windows 启用。.NET 用户现在可以享受与 LDAP 服务器的安全通信了。
感谢@iinuwa。
工具:Crossgen2 替换 crossgen
Crossgen2已为所有现有的 crossgen 场景启用。在我们之后的里程碑里,我们还从 SDK 中删除了(旧的)crossgen。它不再可访问且无法使用。
Crossgen(1 和 2)支持在发布步骤中将 IL 预编译为本机代码。预编译主要有利于改善启动。Crossgen2 是一个从头开始的实现,已被证明是代码生成创新的卓越平台。例如,crossgen2 可以为比 crossgen1 更广泛的 IL 模式集生成代码。
以下 MSBuild 属性演示了如何使用 crossgen2 启用预编译。
<!-- Enable pre-compiling native code (in ready-to-run format) with crossgen2 -->
<PublishReadyToRun>true</PublishReadyToRun>
<!-- Enable generating a composite R2R image -->
<PublishReadyToRunComposite>true</PublishReadyToRunComposite>
库:改进了sync-over-async性能
sync-over-async 是一种常见的阻塞工作类型。当它发生在线程池工作线程上时,它会导致线程池饥饿。缓慢的线程注入可能会延迟其他排队工作的运行,并可能延迟解决饥饿问题。
默认情况下,当异步同步是线程池工作线程上发生的唯一阻塞工作类型时,此更改提高了线程注入的速度。有一些新的AppContext
配置值可用于配置响应异步同步的线程注入率。
运行时:W^X 内存策略
我们正在启用对W^X 内存保护的支持。这是 Apple Silicon 机器的一项要求,也是其他操作系统上的一项有用的安全措施。
此功能的名称有点不正常。它应该读作“写独占执行”。这意味着一个内存页可以被标记为读/写或读/执行,但不能包括写和执行的任何组合。例如,写入/执行页面容易被缓冲区溢出攻击所利用。
此功能需要在整个产品中进行更改,无论在哪里使用写入/执行页面。例如,Preview 6 包含一项更改,要求JIT 与我们采用的 W^X 方案配合。
W^X 是 Apple Silicon 机器上 macOS 的要求,在 .NET 6 的所有其他环境中是可选的,并且可能是 .NET 7 的所有环境中的默认模式。
注意:W^X 实现在 .NET 6 的所有环境中都有一个启动回归,但 Apple Silicon 除外。它将作为 .NET 7 的一部分解决。由于操作系统对此方案的支持, Apple Silicon 实现没有这种回归。
CodeGen 变更日志
以下代码生成更改包含在 Preview 6 中。
动态 PGO
添加选项以随机选择受保护的 devirt 类 https://github.com/dotnet/runtime/pull/53399
pgo/devirt 诊断改进 https://github.com/dotnet/runtime/pull/53247
LSRA
重构 LSRA启发式选择 https://github.com/dotnet/runtime/pull/52832
现在,调试模式包含一个 COMPlus 变量,LsraOrdering 将让用户设置启发式排序。
调整寄存器的启发式以寄存器候选中选择出最佳的一个。https://github.com/dotnet/runtime/pull/53853
以下改进基于这些更改。
更多改进:
Windows x86
Windows x64
通用
代码质量
消除多余的“测试”指令 https://github.com/dotnet/runtime/pull/53214
关闭
发布很快就会来到并即将结束。我们很快将只处理最紧迫的反馈,接近我们用于服务版本的相同错误水平。如果您一直在等待一些反馈或尚未尝试 .NET 6,请立即尝试。这是你影响发布的最后机会。
感谢所有为 .NET 6 成为另一个伟大版本做出贡献的人。
感谢您成为 .NET 开发人员。