.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,一经查实,立即删除!

相关文章

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

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

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

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

基于事件驱动架构构建微服务第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;但不直接将它们发…

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;所以&…

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

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

高效沟通的7C原则

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

WTMPlus 1.4 Uniapp来了

点击上方蓝字关注我们1.4版本长期以来&#xff0c;WTM都是后台管理系统的开发利器&#xff0c;对于移动端支持的不够。这次WTMPlus 1.4我们加入了对UniApp的支持&#xff0c;你可以轻松的使用WTMPlus同时制作后台管理系统和各种移动端小程序了。前后台模式切换用户现在可以自由…

php真随机数,php 的伪随机数与真随机数实例详解

这篇文章主要介绍了PHP的伪随机数与真随机数详解,本文首先讲解了真随机数和伪随机数的相关概念,并给出了比用mt_rand()函数产生更好的伪随机数的一段例子代码,需要的朋友可以参考下首先需要声明的是&#xff0c;计算机不会产生绝对随机的随机数&#xff0c;计算机只能产生“伪随…

C#中的表达式和运算符

欢迎您成为我的读者&#xff0c;希望这篇文章能给你一些帮助。前言今天和大家一起学习下C#中的表达式和运算符&#xff0c;都是很基础的知识点。在日常的编码过程中&#xff0c;对于表达式和运算符我们每天都在使用。比如像下面的代码int age27;就是一种表达式。运算符是一个符…

C#利用Socket实现客户端之间直接通信

2019独角兽企业重金招聘Python工程师标准>>> 实验功能&#xff1a; 设计程序&#xff0c;分别构建通信的两端:服务器端和客户端应用程序,套接字类型为面向连接的Socket,自己构建双方的应答模式&#xff0c;实现双方的数据的发送和接收&#xff08;S发给C&#xff0c…

如何在画面中摆放大量图片

2019独角兽企业重金招聘Python工程师标准>>> 有设计经验的一般都知道&#xff0c;版式设计需要对画面元素之间的关系有充分的认识&#xff0c;并能够在足够有限空间内合理布局&#xff0c;将图形与文字合理结合&#xff0c;下面就来给大家介绍下版式设计的方法。 如…

ASP.NET Core 替换 Action 实际执行方法

RequestDelegate上次&#xff0c;我们在《如何判断当前请求的API类型》中查看endpoints.MapControllers()实现时&#xff0c;最终定位到ActionEndpointFactory.cs&#xff0c;其中有这样一段代码&#xff1a;private static RequestDelegate CreateRequestDelegate() {// We do…

最新版富文本编辑器UEditor操作教程

最近项目中使用到了富文本编辑器&#xff0c;选择的是百度的UEditor。所以对其进行了研究&#xff0c;发现最近发布了新版本&#xff0c;与以往的用法有的改变。一下对UEditotr 的是用做一下详细的介绍。 首先是UEditotr的下载&#xff0c;下载地址&#xff1a;http://ueditor.…

Servlet请求转发中文乱码解决

2019独角兽企业重金招聘Python工程师标准>>> 在Servlet的使用过程中&#xff0c;如果在请求转发的同时需要获得输出流并且写出数据的时候&#xff0c;需要设定resp 的编码格式&#xff0c;否则的话&#xff0c;跳转之后的页面很可能会出现中文乱码的问题。 转载于:h…

NodeJs .net core connect Azure service bus

最近有个项目需要使用nodejs 使用语言是Typescript 发送消息给Azure service bus消息格式是XML.但是发送到queue中并不是xml格式,而是string.string格式的消息直到看到azure/service-bus sdk 接口的定义才发现.如果接收消息应用不是javascript sdk框架(因为使用是.net sdk框架接…

c++代码寻找USB00端口并添加打印机

USB00*端口的背景 插入USB端口的打印机&#xff0c;安装打印机驱动&#xff0c;在控制面板设备与打印机处的打印机对象上右击&#xff0c;可以看到打印机端口。对于不少型号&#xff0c;这个端口是USB001或USB002之类的。 经观察&#xff0c;这些USB00*端口并不是打印机驱动所…

IOS调用WCF提供的服务方法,但是方法的参数是WCF那边自定义的对象,这样有办法调用么,如果可以IOS应该怎么传参呢?请问有了解的么,...

最近做一个项目后端使用WCF接收Android手机拍照并带其它参数保存到服务器里&#xff1b;刚好把最近学习的WCF利用上&#xff0c;本以为是个比较简单的功能应该很好实现&#xff0c;没想到其中碰到不少问题&#xff0c;在网上搜索很久一直没有想到的解决方案&#xff0c;最后实现…