.NET 7 发布的最后一个预览版Preview 7, 下个月发布RC

微软在2022年8月9日 发布了.NET 7 Preview 7[1],这是它在11月10日 RTM 之前进入发布候选阶段之前的最后预览版。 预览版 7 已在 Visual Studio 17.4 预览版 1 中进行了测试,该预览版也于也与 VS 2022 v17.3 版本一起发布。对于预览版7,开发团队专注于改进System.LINQ,Unix文件权限,低级Struct,p/Invoke源代码生成,代码生成和websockets。所有这些特定项目都属于 .NET 网站主题[2]中提供的一般指导。

.NET 7 最终将统一所有不同的 .NET 开发工具组件,使开发人员能够在同一套类库 (BCL)、运行时和编译器上构建所有类型的应用(桌面、移动、Web 等)。这实际上是.NET 5当初的目标, 但是,COVID-19大流行加剧了开发问题,因此并非所有计划的位都进入了.NET 5,并被推迟到2021年11月作为长期支持(LTS)版本推出.NET 6。然而即便如此, 总体开发计划并不完整,因为一些组件,如.NET Multi-platform App UI(.NET MAUI),推迟了时间表。此后,.NET MAUI 刚在几个月前正式发布,测试过的同学都发现MAUI还是有些问题,预计将于 11 月的.NET 7上 实现全面统一。

这种图上还有一个GAMES 部分的Unity3d所采用的Mono 尚未完成统一, Unity内部集结所有热衷于C#和.NET的内部员工,建立一支C#/.NET技术小组来开展工作这部分的统一工作,预计要到2024年完成这项工作,对这部分感兴趣的同学可以看看他们的技术博客:.NET和Unity的未来[3]。

以下是这些改进的摘要,以及指向相关 GitHub 问题和拉取请求的链接,以获取更多信息:

  • 优化 System.LINQ  :System.Linq现在支持的新方法,这源于 dotnet/runtime#67194[4]。System.Linq 现在包含 OrderOrderDescending 方法,它们可以根据 TIEnumerable 进行排序。IQueryable 现在也同样提供对此的支持。

此前需要通过引用自身的值来调用OrderBy/OrderByDescending

var data = new[] { 2, 1, 3 };
var sorted = data.OrderBy(static e => e);
var sortedDesc = data.OrderByDescending(static e => e);

现在支持直接写成:

var data = new[] { 2, 1, 3 };
var sorted = data.Order();
var sortedDesc = data.OrderByDescending();
  • 支持 Unix 文件模式:这使用新的枚举和 API 来解决缺乏对获取和设置 Unix 文件权限的内置支持的问题,Unix 文件权限用于控制哪些用户可以读取、写入和执行文件和目录。这源于 dotnet/runtime PR#69980[5]。

此前 .NET 没有内置支持获取和设置 Unix 文件权限,这些权限用于控制哪些用户可以读取、写入和执行文件以及目录。而且 P/Invoking 手动调用 syscalls 并不容易,因为有些 syscalls 在不同的发行版上有不同的公开方式。例如,在 Ubuntu 上,你可能要对__xstat 进行 Pinvoke,在 Red Hat 上对 stat 进行 Pinvoke,诸如此类。为此,Preview 7 引入了一个新的枚举:

public enum UnixFileMode
{
    None,
    OtherExecute, OtherWrite, OtherRead,
    GroupExecute, GroupWrite, GroupRead,
    UserExecute, UserWrite, UserRead,
     ...
}

用法

// Create a new directory with specific permissions
Directory.CreateDirectory("myDirectory", UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute);

// Create a new file with specific permissions
FileStreamOptions options = new()
{
    Access = FileAccess.Write,
    Mode = FileMode.Create,
    UnixCreateMode =  UnixFileMode.UserRead | UnixFileMode.UserWrite,
};
using FileStream myFile = new FileStream("myFile", options);

// Get the mode of an existing file
UnixFileMode mode = File.GetUnixFileMode("myFile");

// Set the mode of an existing file
File.SetUnixFileMode("myFile", UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute);
  • 低级Struct改进:支持ref :.NET 7 运行时现在完全支持 ByRefLike 类型中的字段ref 字段(即 ref struct)。此功能背后包含大量的语言设计,例如改进底层Sturct[6]。借助此功能,以前需要在运行时环境中进行专门处理的类型(例如 Span<T>ReadOnlySpan<T>),现在可以在 C# 中完全实现。
  • 库p/Invoke源代码生成Likness表示,这反映了在源代码生成器上超过18个月的工作的所取得的成果,旨在成为运行时产品和用户代码中大多数用途的直接替代品。 已推广到所有 .NET 库,这些库自 .NET 7 预览版 1 以来一直随源代码生成的编组代码一起提供。“源生成器与.NET 7 TFM一起提供,随时可供使用,”Likness说。“为了获得源生成的编组的好处,请将 DllImport的用法替换为 LibraryImport。有辅助工具可以帮助完成这一过程。这源于 dotnet/runtime#60595[7]。
  • ClientWebSocket 升级响应详细信息:现在提供有关升级响应的详细信息,特别是有关响应标头和状态代码的信息,这些信息在失败和成功方案中都很有价值。后者可以帮助开发人员在发生故障时区分可重审和不可重回的错误,而标头还可能包含有关如何处理此类情况的其他信息,并且即使在成功的Web套接字连接中也证明是有帮助的,因为它们可以包含绑定到会话的令牌,与子协议版本相关的一些信息以及其他信息。这源于 dotnet/runtime#25918[8]。

Likness还列出了对CodeGen和循环优化的几项改进,以及预览版中的一些重大更改。详情查看发布公告

相关链接:

[1]发布了.NET 7 Preview 7: https://devblogs.microsoft.com/dotnet/announcing-dotnet-7-preview-7/

[2].NET 网站主题:https://themesof.net/?q=Milestone%3A7.0

[3].NET和Unity的未来: https://developer.unity.cn/projects/62bbc040edbc2a7848d45ae8

[4]dotnet/runtime#67194: https://github.com/dotnet/runtime/issues/67194

[5]dotnet/runtime PR#69980: https://github.com/dotnet/runtime/pull/69980

[6]改进底层Sturct: https://github.com/dotnet/csharplang/blob/main/proposals/low-level-struct-improvements.md

[7]dotnet/runtime#60595: https://github.com/dotnet/runtime/issues/60595

[8]dotnet/runtime#25918: https://github.com/dotnet/runtime/issues/25918

原文地址:https://cloud.tencent.com/developer/article/2117075

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340