.NET 7 来了!!!
.NET 7 首个RC(发布候选)版本
最近 .Net 的大事件,就是微软发布了.NET 7的首个RC(发布候选)版本,而据微软发布的消息,这是 .NET 7 的最后一个预览版,下一个版本将是第一个候选版本 (RC),发布时间定于 2022 年 11 月 8 日至 10。
.Net 7 适用于 Windows、macOS 与 Linux,已经支持在生产环境上使用(在这里还是建议小伙伴们稳重一点,先用小项目试试水)。而微软提供的日志,显示,NET 7 RC 1 首次加入云原生支持,这将使得开发者能够更加便利的实现应用上云,或在云端直接构建并运行应用的操作,理论上大大提升了开发效率、生产效率。
除此之外,.NET 7 RC 1还带来了大量更新与优化,具体如下:
-.NET MAUI:.NET多平台应用程序 UI (MAUI) 将 Android、iOS、macOS 和 Windows API 统一到一个API中,开发者可以编写一个在多平台上本机运行的应用。作为.NET 7的一部分,.NET MAUI提供了一个项目来处理跨设备及其平台的多目标。
-ARM64:.NET可帮助开发者构建在ARM设备上运行的应用,.NET 7将迎来多项改进。
-现代化:为了使升级体验尽可能无缝,.NET升级助手为开发者提供分步指导体验,通过分析和改进项目文件、代码文件和依赖项来现代化.NET应用。
-性能:.NET 7是目前最快的.NET。.NET 7对反射、堆栈替换 (OSR)、启动时间、本机 AOT、循环优化和许多其他领域进行了超过一千项影响性能的改进。
目前,微软已经放出了.NET 7 RC 1的链接,有需求的用户可以前往下载,传送门
而微软这边也有相关的博客,感兴趣的小伙伴可以去看看,因为是英文的,浏览器翻译出来的懂得都懂,我就不献丑总结了,硬要说,就是一个字:快!传送门

.NET 7 最新更新
下面是摘抄的一些资料,希望能让小伙伴们更加容易了解到 .Net 7
使用 System.LINQ 简化排序
System.Linq 现在有方法 Order 和 OrderDescending,它们可以根据 T 对 IEnumerable 进行排序。
IQueryable 现在也支持这个。
注意:此更改不会向 System.Linq.Expressions 引入新的语言功能。
用法
以前,您必须通过引用自己的值来调用 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 文件模式
以前,.NET没有对获取和设置Unix文件权限的内置支持,Unix文件权限控制哪些用户可以读、写和执行文件和目录。P/Invoking 手动调用系统并不总是那么容易,因为有些在不同的发行版上以不同的方式公开。 例如,在Ubuntu上你可能需要调用__xstat,在RedHat上调用stat等。 这使得一流的 .NET API 很重要。
在预览版7 中,我们引入了一个新的枚举:
public enum UnixFileMode
{
None,
OtherExecute, OtherWrite, OtherRead,
GroupExecute, GroupWrite, GroupRead,
UserExecute, UserWrite, UserRead,
...
}
以及 API File.GetUnixFileMode 和 File.SetUnixFileMode,它们在路径或句柄(文件描述符)上获取和设置文件模式。 以及 FileInfo 和 DirectoryInfo 上一个名为 UnixFileMode 的新属性。
还有一个新的 Directory.CreateDirectory 重载和 FileStreamOptions 上的一个新属性,允许您一次性创建具有特定模式的目录或文件。 请注意,当您使用这些时,仍会应用 umask,就像您在 shell 中创建目录或文件一样。
用法
// 创建具有特定权限的新目录
Directory.CreateDirectory("myDirectory", UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute); // 创建具有特定权限的新文件
FileStreamOptions options = new()
{ Access = FileAccess.Write,
Mode = FileMode.Create,
UnixCreateMode = UnixFileMode.UserRead | UnixFileMode.UserWrite,
};
using FileStream myFile = new FileStream("myFile", options); // 获取现有文件的模式
UnixFileMode mode = File.GetUnixFileMode("myFile"); // 设置现有文件的模式
File.SetUnixFileMode("myFile", UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute);
非常感谢 @tmds,他是 Red Hat 的长期贡献者,他提出、设计和实现了这个功能。
低级结构改进:ref 字段支持
.NET 7 运行时现在完全支持 ByRefLike 类型(即 ref struct)中的 ref 字段。 在这个备受期待的功能背后有广泛的语言设计,用户可以阅读:低级结构改进。 借助此功能,以前需要在运行时进行专门处理的类型(例如,Span<T> 和 ReadOnlySpan<T>)现在可以在 C# 中完全实现。
LibraryImport P/Invoke 源生成器
LibraryImport 源生成器现在以受支持的方式提供给所有用户。 超过18个月的努力,这个源生成器被设计成大多数DllImport使用的直接替代品,无论是在运行时产品和用户代码中。 .NET 库都采用了 LibraryImport,并且自 .NET 7 预览版 1 以来一直附带源代码生成的编组代码。
源代码生成器随 .NET 7 TFM 一起提供,可随时使用。 为了获得源生成编组的好处,请将 DllImport 的用法替换为 LibraryImport。 有分析器和固定器可以帮助完成这个过程。
用法
前
public static class Native
{
[DllImport(nameof(Native), CharSet = CharSet.Unicode)]
public extern static string ToLower(string str);
}
后
public static class Native
{
[LibraryImport(nameof(Native), StringMarshalling = StringMarshalling.Utf16)]
public static partial string ToLower(string str);
}
有一个分析器和代码修复程序可以自动将您的 DllImport 属性转换为 LibraryImport。 对于预览版7,它是可选的。 将 dotnet_diagnostic.SYSLIB1054.severity = suggestion添加到您的 编辑器配置 文件以启用转换分析器作为诊断。
有关编组自定义类型的设计文档和详细信息可以在 docs/design/libraries/LibraryImportGenerator 找到。
ClientWebSocket 升级响应详细信息
ClientWebSocket 以前没有提供有关升级响应的任何详细信息。 但是,有关响应标头和状态代码的信息在失败和成功方案中可能都很重要。
在失败的情况下,状态码可以帮助区分可重回和不可重回错误(服务器根本不支持 Web 套接字,而只是一个微小的暂时性错误)。 标头还可能包含有关如何处理这种情况的附加信息。
即使在成功的 Web 套接字连接的情况下,标头也很有帮助,例如,它们可以包含绑定到会话的token、一些与子协议版本相关的信息,或者服务器可能即将关闭等。
用法
ClientWebSocket ws = new();
ws.Options.CollectHttpResponseDetails = true;
try
{
await ws.ConnectAsync(uri, default);
// 成功场景 ProcessSuccess(ws.HttpResponseHeaders);
ws.HttpResponseHeaders = null; // 清理(如果需要)
}
catch (WebSocketException)
{
// 失败场景
if (ws.HttpStatusCode != null)
{
ProcessFailure(ws.HttpStatusCode, ws.HttpResponseHeaders);
}
}
循环优化
在预览版 7 中,我们对循环优化进行了多项改进。
• PR #71184 加强了对循环表的检查,以便更好地检查循环完整性,如 #71084 中所述。
• PR #71868不要在循环周围压缩块
• PR #71659 在非轮廓方法中调整具有轮廓内循环的块的权重
• PR #71504 循环提升的改进
• PR #70271 优化多维数组访问。 它将延迟提高了 67%(性能链接)。
此外,在 PR #71236 中为异常处理 函数启用了热/冷拆分。
随机推荐
- plain framework的实际应用和扩展
首先在这里庆祝香港回归祖国的怀抱25周年,想起那年还是一个小学生戴着红领巾和胸章激动不已,实现祖国的统一是每个中华儿女从小的梦想!趁着这欢庆的日子,突然想要写些什么,其实最近也在做一些事,由于工作繁忙 ...
- 小米社区APP深度体验
小米社区APP深度体验 版本:3.0.210928 BUG 1,在暗黑模式下,会员一栏中的成就等级小字未作深色模式调整,从而造成文字难于识别. 2,在暗黑模式下,会员页中底部的会员产品首页视觉没有完美 ...
- C++ delete后的指针在不同编译器下的状态差异
今天看到小伙伴分享的一个问题,小伙伴用的MSVC2019编译器,在对delete后的指针进行取值操作时触发了访问冲突. #include<iostream> using namespace ...
- linux 文件名乱码的文件无法删除
1.通过ls -i命令获得文件的节点号 2.通过节点号删除 find -inum 节点号 -delete 这样就可以删除文件名乱码的文件
- Mac上安装proxychains4
brew install proxychains-ng vim /usr/local/etc/proxychains.conf proxychains4 wget www.google.com
- linux新建分区和磁盘
1.查看已有分区 ]# df –hl fdisk -l 查看磁盘情况 ]# fdisk –l 2.对未分区的进行分区 # fdisk /dev/vdb 硬盘分区 创建了一个55G的分区磁盘 1.新建第 ...
- 2020.7.19 区间 dp 阶段测试
打崩了-- 事先说明,今天没有很在状态,所以题解就直接写在代码注释里的,非常抱歉 T1 颜色联通块 此题有争议,建议跳过 题目描述 N 个方块排成一排,第 i 个颜色为 Ci .定义一个颜色联通块 [ ...
- led闪烁(时序输入输出,自定义变量,时钟仿真,执行顺序)
1.设计定义 设计一个以200ms亮,200ms暗交替闪烁的led灯,并且有一个复位按钮可以停止工作. 2.设计输入 2.1端口 以固定周期交替闪烁说明由时钟控制,需要一个时钟控制端口clk,要求复位 ...
- 求广义表深度(严5.30)--------西工大noj
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef enum{ATOM, LIST ...
- CF1593D2 Half of Same
题目大意: 给定一个包含 \(n\)(\(n\) 是偶数)个整数的数列 \(a_1,a_2,\ldots,a_n\). 考虑一个可能的正整数 \(k\),在每次操作中,你可以选定一个 \(i\),并将 ...