.NET 7 预览版 1 发布

宣布 .NET 7 预览版 1

Jeremy 2022 年 2 月 17 日

今天,我们很高兴地宣布 .NET 历史上的下一个里程碑。在庆祝社区和 20 年创新的同时,.NET 7 Preview 1 标志着迈向 .NET 下一个 20 年的第一步。

ASP.NET Core Preview 1 和 EF7 Preview 1 也在今天发布。

.NET 7 建立在 .NET 6 建立的基础之上,包括一套统一的基础库、运行时和 SDK,简化了开发体验,提高了开发人员的工作效率。.NET 7 的主要关注领域包括改进对云原生方案的支持、更容易升级旧项目的工具,以及通过更轻松地使用容器来简化开发人员体验。

.NET 7 Preview 1 包括对 API 的支持可空性的注解、持续的 JIT 编译器优化、新的 API 以及对更多热重载方案的支持。

.NET 版本包括产品、类库、运行时和工具,代表了 Microsoft 内外多个团队之间的协作。本篇博文中涵盖的更广泛的主题并未涵盖 .NET 7 的所有关键场景和投资。它们代表了很大的领域,但只是进入 .NET 7 中所有重要工作的一部分。我们计划对 ASP.NET Core、Blazor、EF Core、WinForms、WPF 和其他平台进行广泛投资,您可以通过阅读产品路线图了解关于这些领域的更多信息:

  • ASP.NET Core、Blazor 和 Orleans

  • EF7

  • ML.NET

  • .NET MAUI

  • WinForms

  • WPF

  • NuGet

  • [Roslyn](https://github.com/dotnet/roslyn/blob/main/docs/Language Feature Status.md)

您可以下载适用于 Windows、macOS 和 Linux 的.NET 7 Preview 1 。

  • 安装程序和二进制文件

  • 容器镜像

  • Linux 软件包

  • 发行说明

  • 已知的问题

  • GitHub 问题跟踪器

.NET 7 已通过 Visual Studio 17.2 预览版 1 进行测试。如果您想在 Visual Studio 系列产品中试用 .NET 7,我们建议您使用预览频道版本。Visual Studio for Mac 对 .NET 7 预览版的支持尚不可用,但即将推出。

现代化客户端:.NET 多平台应用程序 UI (.NET MAUI)

.NET MAUI 是 .NET 跨平台原生 UI 的未来,将成为 .NET 7 的一部分。周二,我们发布了.NET MAUI Preview 13。我们目前专注于为 .NET 6 提供 .NET MAUI 支持,我们预计很快会提供一个候选版本 (RC)。在我们有可用的 RC 后,我们将专注于发布额外的 RC,直到我们达到一般可用性 (GA) 所需的稳定性。在 .NET MAUI GA 为 .NET 6 发布后,我们将把它包含在 .NET 7 中,并着眼于改进内部开发循环体验、支持最新的 .NET SDK 工具、更快的应用程序性能、共享更多代码以及增强的互操作等主题。查看.NET MAUI 的状态和项目路线图以获取更多信息。

现代云:容器和云原生

从零开始构建云原生应用程序,利用基于 Web 的现代资源,例如数据库服务和托管容器。云原生架构可以通过创建独立于应用程序的其他区域进行部署和扩展的自治子系统(通常称为微服务)来提高大型应用程序的规模,同时降低长期成本。微服务架构是一种流行的方法,因为它很灵活,旨在发展和扩展至单体架构中难以实现的极限。

.NET 7 将通过探索对开发人员体验的改进来更轻松地构建云原生应用程序,例如:

  • 简化实施安全身份验证和授权所需的设置和配置

  • 提高应用程序启动和运行时执行的性能。

我们将继续投资Orleans,这是一个 .NET 跨平台框架,用于构建被称为“分布式 .NET”的分布式应用程序。我们将继续增强 Orleans 的综合文档,并通过改进 Orleans 与Azure App Services和Azure Container Apps等现有云服务的集成,使其更易于使用和实施。

容器是当今许多公司部署云原生应用程序和微服务的首选方式。依赖容器带来了一些挑战,包括管理兼容性、构建和发布镜像、让镜像更安全以及简化镜像的大小和性能。我们相信有机会使用 .NET 容器创造更好的体验。

为了帮助客户应对这些挑战,我们计划使用 .NET 7 中的容器对 .NET 开发进行重大改进。例如,我们将探索通过 MSBuild 直接构建容器作为 SDK 的一项新功能。我们计划增强遥测以提高容器的可观察性。我们还将专注于使我们的容器镜像更小、更快、更安全,同时探索高要求的应用模型,例如 rootless 和 distroless。

现代化:升级 .NET 应用程序

自 .NET 6 发布以来,开发人员一直在升级他们的应用程序,以利用新的性能提升、最小 API 和热重载等生产力特性、新的运行时和 C# 语言创新以及成熟的库和工具生态系统的可用性。在 .NET 7 中,我们将继续使您能够将现有的 .NET 应用程序升级到最新的 .NET 平台和技术。.NET 升级助手中的更多分析器、代码修复程序和对其他应用程序类型的支持将帮助您自信地升级更多应用程序组合,并减少升级所涉及的重复性任务的时间。

我们还知道,每个 .NET 应用程序模型(ASP.NET、WinForms、WPF 等)在现代化方面都有其独特的挑战,并且可能缺少开发人员所需的功能或平台本身的支持。对于其中一些,例如 WCF,可能没有明确的方向。我们将专注于提供适当的指导、文档和工具,以使这些 .NET 应用程序模型更易于升级。

支持

.NET 7 是 Current 版本,这意味着它将在发布之日起 18 个月内获得免费支持和补丁。请务必注意,所有版本的质量都是相同的。LTS 和当前版本之间的唯一区别是支持的长度。有关 .NET 支持政策的更多信息,请参阅.NET 和 .NET Core 官方支持政策。

重大变化

您可以通过阅读 .NET 7 中的重大更改文档找到最新的 .NET 7 重大更改列表。它按区域和版本列出了重大更改,并附有详细说明的链接。

要查看提出了哪些重大更改但仍在审核中,请关注Proposed .NET Breaking Changes GitHub 问题。

预览 1

Preview 1 版本现在提供以下功能。

Microsoft.Extensions 的可空注解

我们在为 Microsoft.Extensions.* 库添加注解以实现可空性方面取得了进展。在 .NET 7 Preview 1 中,以下库已针对可空性进行了注释:

  • Microsoft.Extensions.DependencyInjection.Abstractions

  • Microsoft.Extensions.Logging.Abstractions

  • Microsoft.Extensions.Primitives

  • Microsoft.Extensions.FileSystemGlobbing

  • Microsoft.Extensions.DependencyModel

  • Microsoft.Extensions.Configuration.Abstractions

  • Microsoft.Extensions.FileProviders.Abstractions

  • Microsoft.Extensions.FileProviders.Physical

  • Microsoft.Extensions.Configuration

  • Microsoft.Extensions.Configuration.Binder

  • Microsoft.Extensions.Configuration.CommandLine

  • Microsoft.Extensions.Configuration.EnvironmentVariables

  • Microsoft.Extensions.Configuration.FileExtensions

  • Microsoft.Extensions.Configuration.Ini

  • Microsoft.Extensions.Configuration.Json

到 .NET 7 发布时,我们计划为所有 Microsoft.Extensions.* 库添加可空性注释。您可以查看剩余的库,并在dotnet/runtime#43605处关注进度。

非常感谢 @maxkoshevoi,他为这项工作做出了很大贡献。如果没有 @maxkoshevoi 的帮助,我们就不会走得那么远。

可观察性

继续改进跟踪 API:

  • 添加 ActivityContext.TryParse 重载以允许解析和创建 ActivityContext 对象,包括是否从远程父级传播活动上下文(相关问题)。

  • 添加 Activity.IsStopped() 指示 Activity 对象是否停止的方法(相关问题)。

代码生成

社区 PR(非常感谢 JIT 社区贡献者!!)

来自@am11

  • 将一些旧式内部函数转换为 NamedIntrinsic runtime#62271

来自@anthonycanino

  • 将额外的二进制操作添加到 RangeCheck 分析中。runtime#61662

来自@SeanWoo

  • [JIT] [问题:61620] 针对 *x = dblCns 优化 ARM64;runtime#61847

来自@SingleAccretion

  • 在调用更好的运行时调整浮点 CSE runtime#63903

  • 调整大小时更新新 CSE 的哈希 runtime#61984

  • 重写字段选择并始终在 VN 规范化 SIMD 类型 runtime#61370

  • 添加有关 VN 如何编号内存的文档 runtime#60476

  • 改进强制转换数值 runtime#59841

  • 在块 morphing 中的复杂本地地址下的地址暴露本地变量 runtime#63100

  • 处理嵌入式分配时复制传播 runtime#63447

  • 异常集:调试器检查和修复 runtime#63539

  • 在 emitOutputAM 实现“moffset”编码大小优化 runtime#62896

  • 压缩操作数种类数组并优化 OperIsLocal runtime#63253

  • 使 gtHasRef 关注 LCL_FLD 节点 runtime#62568

  • 为 GT_LCL_FLD 启用全局常量传播 runtime#61209

  • 为小型类型启用全局常量传播 runtime#57726

  • fgMemoryVNForLoopSideEffects 属性类型主选择器 runtime#60505

来自@RalfKornmannEnvision

  • CoreRT 支持 ARM64&Unix runtime#41023

来自@weilinwa

  • 基于覆写优化 FMA 代码生成  runtime#58196

动态 PGO

  • 对 Arm64 的 OSR 支持

  • JIT:支持同步方法的 OSR

  • JIT:处理 OSR、PGO 和尾调用的交互

  • 添加 2009 Jit 架构计划(节选)

  • JIT:一些 relops 的有限版本的前向替换

  • JIT:为后期去虚拟化保存泛型上下文

Arm64

  • Arm64:内存屏障改进

    72f90dd97b598608f0ad7562cda9e6dc.png

  • 在 InitBlkUnroll/CopyBlkUnroll 中使用 SIMD 操作并将展开限制增加到 128 字节

  • [Arm64] 继续展开 InitBlock 和 CopyBlock 最多 128 字节

  • 'cmeq' 和 'fcmeq' Vector64.Zero/Vector128.Zero ARM64 包含优化

  • [arm64] JIT: X % 2 == 0 -> X & 1 == 0

  • [arm64] JIT:添加符号/零扩展

  • [arm64] JIT:为“arrayBase + elementOffset”启用 CSE/提升

  • [arm64] JIT:将“A * B + C”折叠为 MADD/MSUB

循环优化

  • 泛化循环前标头创建和循环提升

  • 循环重构和注释改进

通用优化

  • 加速其他跨平台硬件内在函数

  • 使用 SIMDAsHWIntrinsic 实现 Narrow 和 Widen

  • 添加 IsKnownConstant jit 助手并使用 str.StartsWith('c') 优化 'str == “”'

  • 允许 JIT 在将 HFA/HVA 作为参数/返回值传递时将它们保留在寄存器中

  • 为 Vector64/128/256 启用对 nint/nuint 的支持

  • 添加对 X86Base.Pause() 和 ArmBase.Yield() 的支持

  • 将 PAL 中的首选区域用于 JIT reloc 提示

  • 支持 R2R 中的快速尾调用

  • 允许在 x64 上的尾调用中包含间接寻址

  • 更一般地优化间接单元调用序列

  • 避免为委托调用创建额外的本地

互操作:p/Invoke 代码生成

我们将在 .NET 6 中原型化的 p/invoke 源生成器(Source Generator) 集成到 dotnet/runtime 中,并且一直在转换运行时库以使用它。这意味着转换后的 p/invokes 与 AOT 兼容,不再需要在运行时生成 IL Stub。

我们打算在未来使 p/invoke 源生成器在运行时之外可用。您可以在dotnet/runtime#60595中关注我们剩余的工作。

System.Text.Json 中的新 API

System.Text.Json 附带了一些小的生命周期增强功能:

  • 开发人员现在可以访问System.Text.Json 内部使用的默认单例 JsonSerializerOptions(相关问题)。

  • 添加一个 JsonWriterOptions.MaxDepth 属性并确保此值来自序列化的 JsonSerializerOptions.MaxDepth 等效属性(相关问题)。

  • Patch方法添加到 System.Net.Http.Json(相关问题)。

热重载改进

现在允许在 C# 热重载中为 Blazor WebAssembly 和 .NET 为 iOS 和 Android 进行以下编辑(相关问题):

  • 向现有方法添加静态 lambda

  • 将捕获这个的 lambda 添加到已经有至少一个捕获这个的 lambda 的现有方法中

  • 向现有类添加新的静态或非虚拟实例方法

  • 向现有类添加新的静态字段

  • 添加新类

已知的问题:

  • 不支持新增类中的实例字段

  • 现有或新类中新添加的方法和字段对反射不可见

您可以在dotnet/runtime#57365中关注我们的进度

指定 .NET 7

要使用 .NET 7,您需要在项目文件中使用 .NET 7 Target Framework Moniker (TFM)。例如:

<TargetFramework>net7.0</TargetFramework>

全套 .NET 7 TFM,包括特定于操作系统的 TFM。

  • net7.0

  • net7.0-android

  • net7.0-ios

  • net7.0-maccatalyst

  • net7.0-macos

  • net7.0-tvos

  • net7.0-windows

我们希望从 .NET 6 升级到 .NET 7 应该很简单。请报告您在使用 .NET 7 测试现有应用程序的过程中发现的任何重大更改。

结语

Microsoft 的全球多元化工程师团队与高度参与的开发人员社区合作,正在构建 .NET 7。广泛的 .NET 社区,包括从学生和爱好者到开源贡献者和企业客户的每个人,是 .NET 的核心,他们提出新想法,定期贡献代码,并推动 .NET 生态系统向前发展。我们感激并感谢您的支持、贡献和见解。

欢迎使用 .NET 7。

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

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

相关文章

SQL Server 触发器

原文:SQL Server 触发器触发器 概述 触发器为特殊类型的存储过程&#xff0c;可在执行语言事件时自动生效。SQL Server 包括三种常规类型的触发器&#xff1a;DML 触发器、DDL 触发器和登录触发器。 当服务器或数据库中发生数据定义语言 (DDL) 事件时将调用 DDL 触发器。登录触…

LeetCode之Detect Capital

1、题目 Given a word, you need to judge whether the usage of capitals in it is right or not. We define the usage of capitals in a word to be right when one of the following cases holds: All letters in this word are capitals, like "USA".All lett…

你一写长文章就焦虑拖延?

这是病&#xff0c;得治。 症状 每年春季学期&#xff0c;总会有一些人很烦躁。 别人晒朋友圈&#xff0c;他留言说不中听的话&#xff1b;你见他突然妄自菲薄&#xff0c;开导劝慰他&#xff0c;却被辩驳甚至骂一通&#xff1b;一点儿小事儿&#xff0c;都能激起他胸中的愤怒&…

mysql通过data目录恢复数据库

mysql通过data目录恢复数据库 阅读&#xff1a;1236次 时间&#xff1a;2010-03-24 06:53:30 字体&#xff1a;[大 中 小]重装系统后&#xff0c;MySQL服务没有了&#xff0c;但是数据库的文件还在&#xff0c;这个时候我想恢复以前的数据库&#xff0c; 起码要把数据导出来…

5.7.21mysql数据库_【数据库】mysql5.7.21 winx64安装配置图文分享

本文主要为大家详细介绍了mysql 5.7.21 winx64安装配置方法图文教程&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下&#xff0c;希望能帮助到大家。1、将下载好的mysql压缩包解压到安装目录下2、新建文件my.ini&#xff0c;放置到mysql安装目录下&am…

.NET7的七项重大改进!

.NET 7 Preview1发布了&#xff0c;没时间实操&#xff1f;先快来看看.NET7的七项重大改进&#xff01;1、不再支持.NET 7应用程序、运行时和SDK的多级查找&#xff08;MLL&#xff09;2、PATH停止向.NET 7运行时和SDK添加32位.NET3、默认情况下&#xff0c; dotnet build/publ…

LeetCode之Sum of Two Integers

1、题目 Calculate the sum of two integers a and b, but you are not allowed to use the operator and -. Example: Given a 1 and b 2, return 3. Credits: Special thanks to fujiaozhu for adding this problem and creating all test cases. Subscribe to see wh…

关于新加坡IT薪酬

很多朋友发邮件或留言问我关于新加坡IT薪酬的问题&#xff0c;由于前段时间比较忙&#xff0c;所以没有及时一一回复&#xff0c;在此表示抱歉。 新加坡IT薪酬范围大概如下&#xff08;月薪,新加坡币对人民币为1:5&#xff09;: Junior Developer/Programmer/Engineer/Consulta…

Spring Boot 入门小目标 3 --- 先来试着热部署

2019独角兽企业重金招聘Python工程师标准>>> Spring Boot 入门小目标---先来试着热部署 这次写的主要就是 使用 springloaded 来实现 热部署。 很多时候&#xff0c;我们在修改和添加了新的方法或代码&#xff0c;都需要重启服务器。这样很麻烦&#xff0c;而且 不合…

三:Java之Applet

首先我要说的是Applet是一种应用程序&#xff0c;它是一种由JAVA编写的小应用程序&#xff0c;通常这样的应用程序都像他的名字一样&#xff0c;是一个非常小的程序&#xff0c;或许有些朋友就会问了&#xff0c;那么它是用来干什么的呢&#xff1f;JAVA程序就是JAVA程序啊&…

基于事件驱动架构构建微服务第19部分:使用 SignalR 和 Azure Active Directory 构建和保护实时通信...

原文链接&#xff1a;https://logcorner.com/building-micro-services-through-event-driven-architecture-part19-building-and-securing-real-time-communications-using-signalr-and-azure-active-directory/命令 HTTP API 将事件存储到事件存储&#xff0c;但不直接将它们发…

LeetCode之Maximum Depth of Binary Tree

1、题目 Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. Subscribe to see which companies asked this question. 2、代码实现 /*** Definition for a…

java 多线程之间通信_JAVA多线程之线程间的通信方式解析

JAVA多线程之线程间的通信方式解析一&#xff0c;介绍本总结我对于JAVA多线程中线程之间的通信方式的理解&#xff0c;主要以代码结合文字的方式来讨论线程间的通信&#xff0c;故摘抄了书中的一些示例代码。二&#xff0c;线程间的.通信方式①同步这里讲的同步是指多个线程通过…

Orchard之生成新模板

一&#xff1a;启用 Code Generation 进入后台&#xff0c; Modules –> Developer Enable 之。 二&#xff1a;生成模版 首先&#xff0c;进入 Orchard 命令行 在 CMD 下到达解决方案的 Web 的 Bin 目录下&#xff0c;打开 Orchard 命令&#xff0c;输入&#xff1a; code…

Java设计模式-状态模式(State)

核心思想就是&#xff1a;当对象的状态改变时&#xff0c;同时改变其行为&#xff0c;很好理解&#xff01;就拿QQ来说&#xff0c;有几种状态&#xff0c;在线、隐身、忙碌等&#xff0c;每个状态对应不同的操作&#xff0c;而且你的好友也能看到你的状态&#xff0c;所以&…

cookies,sessionStorage 和 localStorage 的区别?

cookie是网站为了标示用户身份而储存在用户本地终端&#xff08;Client Side&#xff09;上的数据&#xff08;通常经过加密&#xff09;。cookie数据始终在同源的http请求中携带&#xff08;即使不需要&#xff09;&#xff0c;记会在浏览器和服务器间来回传递。sessionStorag…

基于Prometheus的.NET 4.x应用服务监控

【.NET监控】| 总结/Edison Zhou0Why 监控&#xff1f;Edison所在团队95%以上的应用都是基于.NET 4.5开发的&#xff0c;只能跑在Windows Server服务器上的IIS中&#xff0c;公司运维也没有意愿对Windows Server进行有效的管理和提供监控支持&#xff0c;整得我们无法及时查看有…

php+对象+toarray_PHP 对象、数组间的转换

PHP 对象、数组间的转换/*** PHP 对象、数组间的转换** author flyer0126* since 2012/05/03**/// 1. 利用(array)和(object)&#xff0c;简单处理$objTemp (object)array();$objTemp->a 1;$objTemp->b 2;$objTemp->c 3;$arrTemp (array)$objTemp;print_r($objTe…

LeetCode之Happy Number

1、题目 Write an algorithm to determine if a number is "happy". A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process u…

高效沟通的7C原则

2019独角兽企业重金招聘Python工程师标准>>> 怎样确保沟通的顺畅和高效性呢&#xff1f;成功人士已经总结了很多方法&#xff0c;七项基本原则是一种基本的方法&#xff0c;起到了检查列表的作用&#xff0c;在你发送信息之前&#xff0c;对照检查可以帮助你确认信息…