.NET 6 Preview 6 发布
.NET 6 Preview 6 现已发布,此版本是进入 RC 时期之前的倒数第二个预览版,RC 版本将会有两个 。官方表示,Preview 6 本身相对较小,Preview 7 将会更大。在那之后,团队将进行质量修复,直至 11 月的最终版本发布。
x64 仿真更新
开发团队已经完成了对 macOS 的 Apple Silicon 和 Windows 的 Arm64 的支持。剩下的就是在 macOS Apple Silicon 和 Windows Arm64 上支持 x64 仿真。其需要做两件事来实现这一点:
以 .NET CLI 为目标的一流架构(主要)支持在所有场景中使用本机架构 SDK。
在可以使用 side-by-side capable installers 之前(稍后在 .NET 6 中),用户需要安装所有 x64 版本或所有 Arm64 版本。如果要切换,需要卸载/删除 Arm64 机器上的所有 .NET 版本。
Tools:.NET SDK 可选工作负载改进
添加了三个新的工作负载命令,可实现更好的发现和管理。
dotnet workload search
— 列出可安装的工作负载。dotnet workload uninstall
— 如果不再需要工作负载,请删除指定的工作负载。也是节省空间的好选择。dotnet workload repair
— 重新安装你之前安装的所有工作负载。如果你的安装因互联网连接断开而在中间失败,这将非常有用。
可选工作负载由多个工作负载包组成,你可能已经进入这样一种状态,即其中一些安装成功,而另一些安装失败。
在之前的预览中,开发团队添加了以下命令:
dotnet workload install
— 安装工作负载。dotnet workload list
— 列出已安装的工作负载。dotnet workload update
— 更新已安装的工作负载。
Libraries:TLS support for System.DirectoryServices.Protocols
Linux 和 macOS 的 System.DirectoryServices.Protocols 已经启用了 TLS 支持。.NET 用户现在可以享受与 LDAP 服务器的安全通信。
Tools: Crossgen2 替换 crossgen
Crossgen2 已被用于所有现有的 crossgen 方案,官方已从 SDK 中删除了(旧的)crossgen。
Crossgen(1 和 2)能够将 IL 预编译为本地代码作为 publishing step。预编译主要有利于提高启动率。博客内容指出,Crossgen2 是一个从零开始的实现,已经被证明是一个卓越的代码生成创新平台。例如,与 crossgen1 相比,crossgen2 可以为更多的 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>
Libraries:改进了 sync-over-async 的性能
当 sync-over-async 是线程池工作线程上发生的唯一阻塞工作类型时,此更改默认提高了线程注入的速度。有一些新的 AppContext 配置值,可以用来配置响应 sync-over-async 的线程注入率。
Runtime:W^X memory policy
官方正在启用对 W^X memory protection 的支持,这是 Apple Silicon machines 的一项要求,也是其他操作系统上的一项有用的安全措施。 W^X 在 .NET 6 的所有其他环境中是可选的,并且可能是 .NET 7 的所有环境中的默认模式。
CodeGen changelog
Dynamic PGO
添加选项以随机选择受保护的 devirt 类
pgo/devirt 诊断改进
LSRA
重构 LSRA heuristics selection
现在,DEBUG 模式包含一个 COMPlus 变量,LsraOrdering 将让用户设置启发式排序。
调整寄存器的启发式以选择最佳的寄存器候选溢出。
Code quality
消除多余的"test"指令。
完整更新说明可查看发布公告。