AI智能
改变未来

乘风破浪,遇见最美Windows 11之现代Windows桌面应用开发 – .NET 7预览,内置MAUI、帮助.NET应用程序现代化升级


关于.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
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 乘风破浪,遇见最美Windows 11之现代Windows桌面应用开发 – .NET 7预览,内置MAUI、帮助.NET应用程序现代化升级