关于.NET 7.0
https://dotnet.microsoft.com/download/dotnet/7.0
首个预览版已发布,.NET 7有什么新东西?
随着第一个预览版发布,.NET 7渐渐浮出水面,.NET高级项目经理Jeremy Likness在官方博客中介绍了.NET 7的主要发展方向,俺整理给大伙做一下介绍:
.NET 7建立在.NET 6建立的基础之上,其中包括一组统一的基础库、运行时(runtime)和SDK、简化的开发体验和更高的开发人员生产力,.NET 7主要关注领域包括:
- 改进对云原生方案的支持
- 升级旧项目的工具
- 简化开发人员使用容器的难度
现代客户端:.NET多平台应用程序UI(.NET MAUI)
.NET MAUI是.NET跨平台原生UI的未来,将成为.NET 7的一部分。
2月15日.NET MAUI Preview 13发布,在.NET MAUI GA为.NET 6发布后,它将会被包含在.NET 7中,并持续改进开发循环体验、支持最新的.NET SDK工具、更快的应用程序性能、共享代码功能以及增强的互操作性。
感兴趣的兄弟可查看.NET MAUI的状态和项目路线图,以获取更多信息。
现代云:云原生和容器
.NET 7将改进开发人员体验:每个人都能更轻松地构建云原生应用程序,例如:
- 简化安全身份验证和授权所需的设置和配置
- 提高云原生应用程序启动和运行时的执行性能
于此同时,.NET 7将持续投资云原生配套的工具,比如投资.NET跨平台框架Orleans——一个构建分布式应用程序的跨平台框架。具体投资措施有:继续增强Orleans的综合文档,并通过改进Orleans与Azure App Services和Azure Container Apps等现有云服务的集成,使其更易于使用和实施。
此外,.NET 7计划使用容器对.NET开发进行重大改进。例如:
- 探索将“通过MSBuild直接构建容器”作为SDK的一项新功能
- 计划增强遥测,以提高容器的可观察性
- 专注于使容器镜像更小、更快、更安全,同时探索高要求的模型
现代化:升级.NET应用程序
.NET.NET 7继续致力于让开发者将现有的.NET应用程序升级到最新的.NET平台和技术。
https://dotnet.microsoft.com/zh-cn/platform/upgrade-assistant
dotnet tool install -g upgrade-assistant
.NET升级助手(.NET Upgrade Assistant)包含更多分析器、代码修复程序,以及对更多应用程序类型的升级支持,可帮助开发者更轻松地升级.NET应用程序组合,减少升级应用的工作量。
此外,.NET已有20年历史,它的应用程序非常多,其中一些热门应用比如ASP.NET、WinForms、WPF等,由于文档和教程较丰富,现代化的速度比较快,用户升级起来也轻松。但其中一些较冷门的项目,例如WCF(Windows Communication Foundation,微软开发的一系列支持数据通信的应用程序框架),可能没有明确的现代化方向,.NET将对这部分冷门应用提供适当的指导、文档和工具,以使这些.NET应用程序模型更易于升级。
面向.NET 7
如果现在就要面向.NET 7,则需要在项目文件中使用 .NET 7 Target Framework Moniker(TFM)。例如:
<TargetFramework>net7.0</TargetFramework>
附全套.NET 7TFM,包括特定操作系统的TFM。
-
net7.0
-
net7.0-android
-
net7.0-ios
-
net7.0-maccatalyst
-
net7.0-macos
-
net7.0-tvos
-
net7.0-windows
如此便可以使用.NET 7测试现有的应用程序,目前来看,从.NET 6升级到.NET 7还是比较轻松的。
2022年2月17日,公布.NET 7预览版1
今天,我们很高兴地宣布了.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预览版1包括对API的注释,以支持nullability,持续的JIT编译器优化,新的API,以及对更多热重载场景的支持。
.NET的发布包括产品、库、运行时和工具,并代表了微软内部和外部多个团队的合作。这篇博文所涉及的更广泛的主题并不包括.NET 7的所有关键方案和投资。它们代表了很大的领域,但只是进入.NET 7的所有重要工作的一部分。我们计划在ASP.NET Core、Blazor、EF Core、WinForms、WPF和其他平台上进行广泛投资。你可以通过阅读产品路线图了解这些领域的更多信息。
- ASP.NET Core, Blazor, and Orleans
- EF7
- ML.NET
- .NET MAUI
- WinForms
- WPF
- NuGet
- Roslyn
你可以下载.NET 7预览版1,用于Windows、macOS和Linux。
- Installers and binaries
- Container images
- Linux packages
- Release notes
- Known issues
- GitHub issue tracker
.NET 7已经用Visual Studio 17.2 Preview 1进行了测试。 如果你想用Visual Studio家族产品尝试.NET 7,我们建议你使用预览通道构建。Visual Studio for Mac对.NET 7预览版的支持还没有提供,但很快就会推出。
现代客户端(Modern client):.NET多平台应用程序用户界面(.NET MAUI)
.NET MAUI是使用.NET的跨平台原生UI的未来,将成为.NET 7的一部分。周二,我们发布了.NET MAUI预览版13。我们目前正专注于为.NET 6提供.NET MAUI支持,我们预计很快就会发布候选版本(RC)。在我们有了RC之后,我们将专注于运送更多的RC,直到我们达到普遍可用(GA)所需的质量。在.NET MAUI GA为.NET 6发布后,我们将把它纳入.NET 7,并着眼于改善内部开发循环体验,支持最新的.NET SDK工具,更快的应用性能,共享更多的代码,以及增强的互操作故事。
查看.NET MAUI的状态和项目路线图,了解更多信息。
现代云(Modern cloud):云原生(Modern cloud)和容器(containers)
云原生应用程序从头开始构建,以利用现代的、基于网络的资源,如数据库服务和托管容器。云原生架构可以通过创建自主的子系统(通常被称为微服务)来提高大型应用的规模,这些子系统的部署和扩展独立于应用的其他区域,同时从长远来看降低了成本。微服务架构是一种流行的方法,因为它很灵活,旨在发展和扩展到单体架构中难以实现的极限。
.NET 7将通过探索对开发者体验的改进,使构建云原生应用程序变得更加容易,例如。
- 简化实施安全认证和授权所需的设置和配置
- 提高应用程序的启动和运行时执行的性能。
我们将继续对Orleans进行投资,这是一个用于构建分布式应用的.NET跨平台框架,被称为 "分布式.NET"。我们将继续加强Orleans的全面文档,并通过改善Orleans与现有云服务(如Azure App Services和Azure Container Apps)的整合,使其更易于使用和实施。
容器是目前许多公司部署云原生应用和微服务的首选方式。依靠容器带来了一些挑战,包括管理合规性、构建和发布镜像、保障镜像安全以及简化镜像的大小和性能。我们相信,有机会利用.NET容器创造更好的体验。
为了帮助客户面对这些挑战,我们计划在.NET 7中用容器对.NET开发进行重大改进。例如,我们将探索通过MSBuild直接构建容器,作为SDK的一项新功能。我们计划加强遥测,以提高容器的可观察性。我们还将专注于使我们的容器镜像更小、更快、更安全,同时我们将探索高度要求的模式,如无根(rootless)和无发行版(distroless)。
现代化(Modernize):升级.NET应用程序
自.NET 6发布以来,开发人员一直在升级他们的应用程序,以利用新的性能提升、最小化API和热重载等生产力特性、新的运行时和C#语言创新以及成熟的库和工具生态系统的可用性。
https://dotnet.microsoft.com/zh-cn/platform/upgrade-assistant
在.NET 7中,我们将继续使您能够将您现有的.NET应用推进到最新的.NET平台和技术。更多的分析器、代码修复器以及对 .NET升级助手(.NET Upgrade Assistant)中更多应用类型的支持,将帮助您自信地升级更多的应用组合,并在升级所涉及的重复性任务中花费更少的时间。
我们也知道,每一种.NET应用模型(ASP.NET、WinForms、WPF等)在现代化方面都有自己独特的挑战,而且可能缺乏你作为开发者所需要的功能,或者缺乏平台本身的支持。对于其中的一些,如WCF,可能没有一个明确的方向给你。我们将专注于提供适当的指导、文档和工具,使这些.NET应用模型更容易升级。
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的帮助,我们就不会走到今天。
互操作:p/Invoke代码生成
我们将.NET 6中原型化的p/invoke源生成器集成到dotnet/runtime 中,并一直在转换运行时库以使用它。这意味着转换后的p/调用与AOT兼容,不再需要在运行时生成IL存根
我们打算使p/invoke源生成器将来在运行时之外可用。您可以在dotnet/runtime#60595中关注我们的剩余工作.
System.Text.Json中的新API
System.Text.Json附带了一些小的质量增强功能:
- 开发人员现在可以访问
System.Text.Json
内部使用的默认单例(相关问题)
.JsonSerializerOptions
- 添加一个属性,并确保此值在序列化时从等效属性流出(相关问题)
.JsonWriterOptions.MaxDepthJsonSerializerOptions.MaxDepth
- 将方法添加到(相关问题)
.PatchSystem.Net.Http.Json
热重载(Hot reload)改进
现在允许在Blazor WebAssembly的C#热重载和适用于iOS和Android的.NET中进行以下编辑(相关问题):
- 将静态lambda添加到现有方法
- 将捕获此值的lambda添加到已具有至少一个捕获此值的lambda的现有方法中
- 向现有类添加新的静态或非虚拟实例方法
- 向现有类添加新的静态字段
- 添加新类
已知问题:
- 不支持新添加类中的实例字段
- 现有类或新类中新添加的方法和字段对反射不可见
您可以在dotnet/runtime#57365中关注我们的进度
以.NET 7为目标
若要以.NET 7为目标,需要在项目文件中使用.NET 7目标框架名称(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测试现有应用的过程中发现的任何重大更改。
参考
- 首个预览版已发布,.NET 7 有什么新东西?
- .NET 7 有什么新东西?
- Announcing .NET 7 Preview 1