.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 。
.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
来自@anthonycanino
来自@SeanWoo
来自@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
来自@weilinwa
动态 PGO
- 对 Arm64 的 OSR 支持
- JIT:支持同步方法的 OSR
- JIT:处理 OSR、PGO 和尾调用的交互
- 添加 2009 Jit 架构计划(节选)
- JIT:一些 relops 的有限版本的前向替换
- JIT:为后期去虚拟化保存泛型上下文
Arm64
- Arm64:内存屏障改进
- 在 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。
.NET 7 预览版 1 发布的更多相关文章
- 消息:SQL Server 2017(vNext)的第三个公开的CTP(社区技术预览版)发布了
今天看到了一个新闻,跟大家分享一下,有兴趣的可以去尝试一下. SQL Server 2017 CTP3于5月23日发布了,详细版本号是6.7.55.0. 大家可以去安装试试.在下载页面,目前是SQL ...
- 微软.NET CORE 3.0 预览版 7 发布:大幅减少 SDK 空间大小
据悉,这个预览版是 .Net Core 3 中重要的版本,可以视为原计划在 7 月发布的 RC 版本 (引自微软 .NET Core 首席 Program Manager Richard 先生原话), ...
- .NET 5.0预览版6发布:支持Windows ARM64设备
2020年6月25日,微软dotnet团队在博客宣布了第六个 .NET 5.0 的预览版:https://devblogs.microsoft.com/dotnet/announcing-net-5- ...
- .NET 6 预览版 5 发布
很高兴.NET 6 预览版5终于跟大家见面了.我们现在正处于.NET 6 的后半部分,开始整合一些重要的功能. 例如.NET SDK 工作负载,它是我们.NET 统一愿景的基础,可以支持更多类型的应用 ...
- .NET 6 预览版 7 发布——最后一个预览版
原文:bit.ly/2VJxjxQ 作者:Richard 翻译:精致码农-王亮 说明:文中有大量的超链接,这些链接在公众号文章中被自动剔除,一部分包含超链接列表的小段落被我删减了,如果你对此感兴趣,请 ...
- HarmonyOS 3.0.0开发者预览版全新发布
2021年10月22日在华为开发者大会HDC.Together 2021 主题演讲上,我们发布了HarmonyOS 3.0.0开发者预览版,主要内容包括:Harmony设计系统.ArkUI 3.0.A ...
- 传Windows 9预览版今秋发布
据ZDNet长期关注微软动态的资深人士玛丽•乔•弗利(Mary Jo Foley)称,Windows 9预览版将会在9月或者10月推出.按照这一进度,代号为“Threshold’”的Windows 9 ...
- 宣布发布全新的 Windows Azure 缓存预览版
全新 Windows Azure 缓存的预览版现已发布.此托管服务可以提供闪电般的数据访问速度,以帮助您构建更具可伸缩性.响应更快的应用程序. 详情如下: · 托管式缓存:这一全新的托管服务为需 ...
- 实时人工智能:微软发布Project Brainwave预览版 现场可编程门阵列(Field Programmable Gate Array,简称FPGA) 硬件设计可以迅速演进
https://mp.weixin.qq.com/s/bAPiPURZd-YsbV5PbzwpQQ 编者按:随着各大公司对于数据计算的要求越来越高,实时AI成为了研究者们关注的重点.在美国西雅图举行的 ...
随机推荐
- layui type:2 iframe子页面向父页面传值
需求: 选择子页面表格中的radio或者双击该行,得到的该行数据传到父页面,由父页面渲染. 网上的各种方法都用了,父页面就是获取不到子页面传的值,过了一晚上,睡了一觉,柳暗花明又一村. layui t ...
- JVM调优-1
JVM运行参数 在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行.绝大部分的参数保持默认即可. 三种参数类型 标准参数 -help -version -X参数(非标准参 ...
- 《剑指offer》面试题57 - II. 和为s的连续正数序列
问题描述 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数). 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列. 示例 1: 输入:target ...
- 图片不清晰?Graphics 高质量绘制
Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; Graphics ...
- nodejs express异常捕获
参考链接: http://blog.coinidea.com/web开发/nodejs-1131.html 由于nodejs是非阻塞单进程单线程的,一旦nodejs抛出异常,整个服务就会停掉.服务将会 ...
- Servlet监听器统计网站在线人数
本节我们利用 Servlet 监听器接口,完成一个统计网站在线人数的案例.当一个用户登录后,显示欢迎信息,同时显示出当前在线人数和用户名单.当用户退出登录或 Session 过期时,从在线用户名单中删 ...
- IoC容器-Bean管理XML方式(引入外部属性文件)
IoC操作Bean管理(引入外部属性文件) 1,直接配置数据库信息 (1)配置德鲁伊连接池 (2)引入德鲁伊连接池依赖jar包 2,通过引入外部属性文件配置数据库连接池 (1)创建外部属性文件,pro ...
- (2)RabbitMQ架构设计与应用场景
1.什么是消息中间件? 消息是指应用间传输的数据.消息体包括文本字符串.Json.内嵌对象等.消息中间件是基于队列模型实现异步和同步传输数据的.作用:解耦,冗余(存储).扩展性.削峰.可恢复性.顺序保 ...
- 异常机制(Exception)
异常机制(Exception) 异常程序是指程序运行中出现的不期而至的各种状况,如文件找不到,网络连接失败,非法参数等. 异常发生在程序运行期间,它影响了正常的程序执行流程 检查性异常 最具代表性的检 ...
- Android Compose的Window Insets
Android Compose的Window Insets 除了app的内容区域外, 还有一些其他的固定元素会显示在手机屏幕上, 顶部的状态栏, 刘海, 底部的导航栏, 还有输入法键盘, 它们都是系统 ...