前言

我们很高兴今天发布 .NET 5.0 并让您开始使用它。这是一个主要版本 - 包括C# 9和F# 5 - 具有广泛的新功能和引人注目的改进。它已经被微软和其他公司的团队积极使用,用于生产和性能测试。这些团队向我们展示了出色的结果,这些结果证明了性能的提高和/或降低其Web应用程序托管成本的机会。自预览版1开始,我们一直在5.0上运行我们自己的网站。从我们目前所见所闻来看,.NET 5.0 无需太多升级努力即可提供显着的价值。它是您下一个应用程序的绝佳选择,并且是从早期 .NET Core 版本的直接升级。我们希望您喜欢在台式机、笔记本电脑和云实例上使用它。

ASP.NET Core、EF Core、C#9和F#5也在今天发布。

.NET 5.0 是我们 .NET 统一旅程中的第一个版本。我们构建 .NET 5.0 是为了让更多的开发人员能够将他们的 .NET Framework 代码和应用程​​序迁移到 .NET 5.0。我们还在 5.0 中完成了大部分早期工作,以便 Xamarin 开发人员可以在我们发布 .NET 6.0 时使用统一的 .NET 平台。有关 .NET 统一的更多信息,稍后将在帖子中介绍。

现在是与为 .NET 项目做出贡献的每个人进行令人难以置信的合作的好时机。此版本将第五个主要的.NET版本标记为一个开源项目。现在,在 GitHub 上的dotnet 组织中,有大量个人和大小公司(包括.NET 基金会的企业赞助商)作为一个大型社区在 .NET 的各个方面一起工作。.NET 5.0 中的改进是许多人、他们的努力、聪明的想法以及对平台的关心和热爱的结果,所有这些都超出了 Microsoft 对项目的管理。从每天都在 .NET 上工作的核心团队,我们向所有为 .NET 5.0(和以前的版本)做出贡献的人致以非常大的“谢谢”!

我们早在 2019 年 5 月就推出了 .NET 5.0,当时甚至将发布日期定为 2020 年 11 月。来自那篇文章:“我们将在今年 9 月发布 .NET Core 3.0,在 2020 年 11 月发布 .NET 5,然后我们打算每年发布一次 .NET 的主要版本,每年 11 月”。您可能会认为“2020 年 11 月”是一张支票,鉴于今年的所有挑战无法兑现,但 .NET 5.0 已按时发布。感谢团队中实现这一目标的每个人!我知道这并不容易。展望未来,您应该会在 2021 年 11 月期待 .NET 6.0。我们打算每年 11 月发布新的 .NET 版本。

亮点

.NET 5.0 中有许多重要的改进:

  • .NET 5.0 已经在dot.net和Bing.com(版本)上托管了数月,经过了实战测试。
  • 许多组件的性能都得到了极大的提高,在 .NET 5.0中的性能改进、.NET 5.0中的Arm64 性能和gRPC中进行了详细描述。
  • C# 9 和 F# 5 提供了新的语言改进,例如 C# 9 的顶级程序和记录,而 F# 5 提供交互式编程和 .NET 上函数式编程的性能提升。
  • .NET 库增强了 Json 序列化、正则表达式和 HTTP(HTTP 1.1、HTTP/2)的性能。它们现在也完全注释为可空性。
  • 由于GC、分层编译和其他领域的改进,P95 延迟已经下降。
  • 应用程序部署选项更好,具有 ClickOnce 客户端应用程序发布、单文件应用程序、减小的容器映像大小以及添加服务器核心容器映像。
  • 平台范围通过Windows Arm64和WebAssembly扩展。

统一平台愿景

去年,我们分享了统一 .NET 堆栈和生态系统的愿景。对您而言,价值在于您将能够使用一组 API、语言和工具来定位广泛的应用程序类型,包括移动、云、桌面和 IoT。您可能会意识到,如今您已经可以使用 .NET 来定位广泛的平台,但是,例如,Web 和移动设备上的工具和 API 并不总是相同或同时发布。

作为 .NET 5.0 和 6.0 的一部分,我们将 .NET 统一到单一的产品体验中,同时让您可以只选择要使用的 .NET 平台部分。如果您想针对 Mobile 而不是 WebAssembly,则不需要下载 WebAssembly 工具,反之亦然。与 ASP.NET Core 和 WPF 相同。您还可以通过更简单的方式从命令行获取所需的所有 .NET 工具以及构建和运行时包。我们正在为 .NET 平台组件提供包管理器体验(包括使用现有的包管理器)。这对于许多场景来说都很棒。快速构建开发环境和 CI/CD 可能是最大的受益者。

我们原本打算通过 .NET 5.0 实现整个统一愿景,但在全球大流行之后,我们不得不适应客户不断变化的需求。我们一直在与来自世界各地的公司的团队合作,这些公司需要帮助来加快他们对云技术的采用。他们也已经适应了客户不断变化的需求。因此,我们在两个版本中实现了愿景。

实现这一愿景的第一步是整合 .NET 存储库,包括 Mono 的一个大子集。拥有一个运行时库和 .NET 库是在任何地方交付相同产品的先决条件。它还有助于进行影响运行时和库的广泛更改,其中以前存在存储库边界。有些人担心大型回购会更难管理。事实并非如此。

在.NET 5.0版本中,Blazor是利用回购合并和.NET统一的最佳示例。Blazor WebAssembly的运行时和库现在是从整合的dotnet/runtime 存储库构建的。例如,这意味着服务器上的 Blazor WebAssembly 和 Blazor 使用完全相同的代码。在 .NET 5.0 之前,Blazor 并非如此。我们为 Blazor WebAssembly 采取的方法与我们将在 .NET 6.0 中对 Xamarin 采取的方法非常相似。List

.NET Framework 仍然是受支持的 Microsoft 产品,并且每个新版本的 Windows 都将继续支持。我们去年宣布我们已停止向 .NET Framework 添加新功能并完成向 .NET Core 添加 .NET Framework API。这意味着现在是考虑将 .NET Framework 应用程序迁移到 .NET Core 的好时机。对于 .NET Framework 客户端开发人员,.NET 5.0 支持 Windows 窗体和 WPF。我们从许多开发人员那里听说,从 .NET Framework 移植很简单。对于 .NET Framework 服务器开发人员,您需要采用 ASP.NET Core 才能使用 .NET 5.0。对于 Web Forms 开发人员,我们相信Blazor通过高效且更现代的实现提供类似的开发人员体验。WCF 服务器和工作流用户可以查看支持这些框架的社区项目。在从.NET框架到.NET核心移植文档是一个良好的开端。总而言之,如果您对自己的体验感到满意,那么将您的应用程序保持在 .NET Framework 上是一种不错的方法。

Windows 团队正在将Project Reunion作为 UWP 和相关技术的下一步工作。我们一直在与 Reunion 团队合作,以确保 .NET 5.0 及更高版本能够与 WinUI 和 WebView2 完美配合。Project Reunion 存储库是了解最新进展的最佳场所。