.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]中提供的一般指导。

e2ea568db699e30a54ec20d9e26e3e3a.png

.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上 实现全面统一。f8dd25c0b13792ce21b9529cdd6d21ca.png

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

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

  • 优化 System.LINQ  :System.Linq现在支持的新方法,这源于 dotnet/runtime#67194[4]。System.Linq 现在包含 Order 和 OrderDescending 方法,它们可以根据 T 对 IEnumerable 进行排序。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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022年全球职业教育行业发展报告

职业教育丨研究报告 核心摘要&#xff1a; 职业教育是职业学校教育与职业培训组成的有机整体&#xff0c;行业参与者除教育培训机构与受训学生外&#xff0c;还涉及企业雇主、行业协会、政府等多方&#xff0c;各群体共同构成密不可分的产业生态。 宏观而言&#xff0c;职业…

C++中STL的一些用法的补充

1 清空vector中的所有元素并释放内存&#xff1a; 1 vector<int*> xx; 2 for(int it0;it!xx.size();it) 3 { 4 delete xx[it]; 5 } 6 xx.clear(); 转载于:https://www.cnblogs.com/jinzhipeng/p/6825585.html

实战Cacti网络监控(1)——基础安装配置

实验环境&#xff1a; 物理主机 redhat7.0 内核版本 3.10.0-123.el7.x86_64 虚拟机 redhat6.5 内核版本 2.6.32-431.el6.x86_64 server10.example.com 172.25.254.10 所需软件包&#xff1a; cacti-0.8.8h.tar.g…

HTTP 3.0为什么彻底放弃TCP

从HTTP/1.0开始&#xff0c;一直到HTTP/2&#xff0c;不管应用层协议如何改进&#xff0c;TCP一直以来都是HTTP协议的基础&#xff0c;主要是因为他能提供可靠连接。 但是&#xff0c;从HTTP 3.0开始&#xff0c;这个情况就有所变化了。 因为&#xff0c;在最新推出的HTTP 3.0中…

《ASP.NET Core 6框架揭秘》实例演示[13]:日志的基本编程模式

《ASP.NET Core 6框架揭秘实例演示[11]&#xff1a;诊断跟踪的几种基本编程方式》介绍了四种常用的诊断日志框架。其实除了微软提供的这些日志框架&#xff0c;还有很多第三方日志框架可供我们选择&#xff0c;比如Log4Net、NLog和Serilog 等。虽然这些框架大都采用类似的设计&…

网络流Dinic算法模板 POJ1273

这就是以后我的板子啦~~~ #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 444 int tot,next[N],first[N],w[N],v[N],n,m,ch[N]; void add(int from,int to,int weight){v[tot]to;w[tot]…

vue-cli 3.0配置webpack目录别名alias

最近用vue脚手架新建工程的时候&#xff0c;发现vue-cli提供的是3.0.0-beta.6版本&#xff0c;安装完成之后也找不到config、build等目录&#xff0c;不懂要从哪里入手配置别名alias 看了下官方文档&#xff0c;简化成使用vue.config.js来配置项目&#xff0c;一路找到了webpac…

Caffine Cache 及在SpringBoot中的使用

这一篇我们将要谈到一个新的本地缓存框架&#xff1a;Caffeine Cache。它也是站在巨人的肩膀上-Guava Cache&#xff0c;借着他的思想优化了算法发展而来。 本篇博文主要介绍Caffine Cache 的使用方式&#xff0c;以及Caffine Cache在SpringBoot中的使用。 1. Caffine Cache 在…

C#深入.NET平台的软件系统分层开发

今天我们来讲讲分层开发&#xff0c;你从标题能不能简单的认识一下什么是分层呢&#xff1f; 不懂也没关系&#xff0c;接下来我来给你讲讲。 第一章 软件系统的分层开发 &#xff08;1&#xff09;其实分层模式可以这样定义&#xff1a;将解决方案中功能不同的模块分到不同的项…

Blazor University (44)依赖注入

原文链接&#xff1a;https://blazor-university.com/dependency-injection/依赖注入依赖注入概述依赖注入是确保类保持松散耦合并使单元测试更容易的最佳实践软件开发技术。以使用第三方服务发送电子邮件的服务为例。传统上&#xff0c;任何需要使用此服务的类都可能创建一个实…

productFlavors设置signingConfig不管用的问题

2019独角兽企业重金招聘Python工程师标准>>> 在buildTypes release里面添加&#xff1a; productFlavors.dev_.signingConfig signingConfigs.devSign productFlavors.alphaTest_.signingConfig signingConfigs.devSign productFlavors.betaTest_.signingConfig si…

【转】基于jquery,bootstrap数据验证插件bootstrapValidator 教程

bootstrap&#xff1a;能够增加兼容性的强大框架. 因为项目需要数据验证&#xff0c;看bootstrapValidator 还不错&#xff0c;就上手一直&#xff0c;完美兼容&#xff0c;话不多说。 需要引用css&#xff1a; bootstrap.min.css bootstrapValidator.min.css js: jquery-1.10.…

三招从 20s 优化到 500ms

来源 | 苏三说技术 作者 | 苏三呀 前言 接口性能问题&#xff0c;对于从事后端开发的同学来说&#xff0c;是一个绕不开的话题。想要优化一个接口的性能&#xff0c;需要从多个方面着手。 本文将会围绕接口性能优化这个话题&#xff0c;从实战的角度出发&#xff0c;聊聊我是…

Linux学习之服务器搭建——DHCP服务器

通过前面基础网络配置已经将两台虚拟机连接起来了&#xff0c;在windows 下是将它和Centos设为统一网段&#xff0c;在DHCP里同样不变&#xff0c;改变的是将windows 所配置的静态IP全部换成“自动获取DHCP”而在接下来的操作&#xff0c;就是让我的windows 自动获取来自Linux …

WPF 动态切换黑|白皮肤

WPF 动态切换黑|白皮肤WPF 使用 WPFDevelopers.Minimal 如何动态切换黑|白皮肤作者&#xff1a;WPFDevelopersOrg原文链接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers.Minimal框架使用大于等于.NET40&#xff1b;Visual Studio 2022;项目使用 MIT 开源…

中小企业虚拟化解决方案-VMware vSphere 6.5-日常管理入口v0.0.1

中小企业虚拟化解决方案-VMware vSphere 6.5日常管理入口v0.0.1本文目的&#xff1a;针对中小企业虚拟化的平台管理&#xff0c;涉及到很多管理入口&#xff0c;普通管理员未必知道从哪里管理?本文将从最底层到最高层进行简单的介绍&#xff0c;最终让普通管理员快速了解管理入…

Svn服务器的搭建与配置

本文由ilanniweb提供友情赞助&#xff0c;首发于烂泥行天下想要获得更多的文章&#xff0c;可以关注我的微信ilanniweb要把svn代码同步到git服务器上&#xff0c;本来是想通过subgit直接同步进行就行了。但是自已以前没有搭建过svn服务器&#xff0c;所以有了这篇文章。我们就来…

JAVA Future类详解

1. Future的应用场景 在并发编程中&#xff0c;我们经常用到非阻塞的模型&#xff0c;在之前的多线程的三种实现中&#xff0c;不管是继承thread类还是实现runnable接口&#xff0c;都无法保证获取到之前的执行结果。通过实现Callback接口&#xff0c;并用Future可以来接收多线…

最新 .NET 社区工具包, 推出MVVM 源代码生成器!

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;10分钟)我们很高兴地宣布正式推出新的 .NET 社区工具包&#xff0c;现在已经在NuGet上发布了8.0.0版本&#xff01;这是一个重要版本&#xff0c;包括大量新功能、改进、优化、错误修复&#xff0c;许多反映了全新项目…

【bzoj4145】[AMPPZ2014]The Prices 状压dp

原文地址&#xff1a;http://www.cnblogs.com/GXZlegend/p/6832200.html 题目描述 你要购买m种物品各一件&#xff0c;一共有n家商店&#xff0c;你到第i家商店的路费为d[i]&#xff0c;在第i家商店购买第j种物品的费用为c[i][j]&#xff0c;求最小总费用。输入 第一行包含两个…