微软在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

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

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

.NET 7 发布的最后一个预览版Preview 7, 下个月发布RC的更多相关文章

  1. 它来了!!!有史以来第一个64位Visual Studio(2022)预览版将在今夏发布!

    美国时间2021年4月19日,微软产品研发部一位负责人Amanda Silver在其博客上发布一则<Visual Studio 2022>的消息,表示将在今年(2021年)夏天发布Visu ...

  2. .NET 6 预览版 7 发布——最后一个预览版

    原文:bit.ly/2VJxjxQ 作者:Richard 翻译:精致码农-王亮 说明:文中有大量的超链接,这些链接在公众号文章中被自动剔除,一部分包含超链接列表的小段落被我删减了,如果你对此感兴趣,请 ...

  3. 微软发布 Windows Server 2016 预览版第三版,开发者要重点关注Nano Server

    微软已经发布 Windows Server 2016 和 System Center 2016 第三个技术预览版,已经提供下载.Windows Server 2016 技术预览版第三版也是首个包括了容 ...

  4. 乘风破浪,遇见Visual Studio 2022预览版(Preview),宇宙最强开发者工具首次迎来64位版本

    简介 众所周知,我们从官方新闻来看,对Visual Studio 2022最大的期待莫过于:其是首个64位的Visual Studio,这个宇宙最强开发者工具一脚迈入了新的阶段. https://vi ...

  5. 实时人工智能:微软发布Project Brainwave预览版 现场可编程门阵列(Field Programmable Gate Array,简称FPGA) 硬件设计可以迅速演进

    https://mp.weixin.qq.com/s/bAPiPURZd-YsbV5PbzwpQQ 编者按:随着各大公司对于数据计算的要求越来越高,实时AI成为了研究者们关注的重点.在美国西雅图举行的 ...

  6. .NET 6 预览版 5 发布

    很高兴.NET 6 预览版5终于跟大家见面了.我们现在正处于.NET 6 的后半部分,开始整合一些重要的功能. 例如.NET SDK 工作负载,它是我们.NET 统一愿景的基础,可以支持更多类型的应用 ...

  7. Windows 10简体中文最新预览版Build 9926

    Windows 10 消费者预览版全新特性: • 全新的开始菜单Win 10的开始菜单产生了较大改变,磁贴界面在原有磁贴概念的基础上进行了大幅度的调整,新的磁贴界面开始支持纵向滚动,并可以利用开始按钮 ...

  8. (转)ASP.NET MVC 第五个预览版和表单提交场景

    转自:http://ourlife.blog.51cto.com/708821/296171 上个星期四,ASP.NET MVC开发团队发布了ASP.NET MVC框架的“第五个预览版”.你可以在这里 ...

  9. 官宣.NET 6 预览版4

    我们很高兴发布 .NET 6 Preview 4.我们现在大约完成了 .NET 6 发布的一半.现在是一个很好的时机,可以再次查看.NET6的完整范围.许多功能都接近最终形式,而其他功能将很快推出,因 ...

随机推荐

  1. 【Unity Shader学习笔记】Unity光照基础-高光反射

    1.原理 1.1.Phong模型 计算高光反射需要表面法线.视角方向.光源方向.反射方向等. 在这四个矢量中,我们实际上只需要知道其中3个矢量即可,而第4个矢量(反射方向r)可以通过其他信息计算得到: ...

  2. Unity实现”对象池管理器“

    前言:警告!这可能是坨屎,空闲时间写成,仅作娱乐 在Unity中生成或销毁一个物体会占用较大的资源,如果是制作FPS射击游戏,子弹生成更是雪上加霜.所以我自己写了一个PoolManager,不能和网上 ...

  3. 关于『HTML』:第一弹

    关于『HTML』:第一弹 建议缩放90%食用 根据C2024XSC212童鞋的提问, 我准备写一稿关于『HTML』基础的帖 But! 当我看到了C2024XSC130的 "关于『HTML5』 ...

  4. ExtJS 布局-Absolute布局(Absolute layout)

    更新记录: 2022年5月31日 发布本篇 1.说明 使用xy配置项设置子组件在父容器中绝对位置,本质是将子组件的CSS的position设置为absolute,然后使用x和y配置项映射到CSS的to ...

  5. 面试突击60:什么情况会导致 MySQL 索引失效?

    为了验证 MySQL 中哪些情况下会导致索引失效,我们可以借助 explain 执行计划来分析索引失效的具体场景. explain 使用如下,只需要在查询的 SQL 前面添加上 explain 关键字 ...

  6. python简单处理验证码,三分钟,不能再多了

    序言 大家好鸭, 又是我小熊猫啦 我们在做采集数据的时候,过快或者访问频繁,或者一访问就给弹出验证码,然后就蚌珠了~今天就给大家来一个简单处理验证码的方法 环境模块 Python和pycharm如果还 ...

  7. 关于android sdk中monitor.exe报错的问题

    今天又是被坑的一上午.来总结一下: 1. 首先是找不到monitor的问题: 这个可能是一开始环境配置错误.所以我将android sdk重装了一下就好了 2. 第二个是找到monitor.bat发现 ...

  8. Iterator接口介绍和迭代器的代码实现

    定义:Iterator接口是Java集合框架中的一员. 作用:Collection接口与Map接口主要用于存储元素. 常用方法:  boolen hasNext();    //判断游标右边是否还有元 ...

  9. 【python】M3U8下载器脚本

    [python]M3U8下载器脚本 脚本目标: 1. 输入M3U8文件的链接,得到视频 2.使用异步操作,这样可以快很多,不加锁,因为懒得写,而且影响不大 已知条件: 1.m3u8文件其实就是一个记录 ...

  10. 攻防世界MISC进阶区 61-63

    61.肥宅快乐题 得到swf文件,但是用PotPlayer打不开,用浏览器应该可以打开,打开后可以在npc的对话中看到一段base64 解密后就可以得到flag 62.warmup 得到一张png和一 ...