一年一度的 .NET 开发者盛会 .NET Conf 2019 已正式开始了(举办时间为 9.23-9.25)。大会第一天最重磅也是最激动人心的消息莫过于 .NET Core 3.0 稳定版的发布。.NET 项目管理总监 Scott Hunter 在大会宣布了这则消息,并在主题演讲环节围绕 .NET Core 3.0 的新特性和社区展开了介绍。
作为一个大版本更新,.NET Core 3.0 引入了大量改进和新特性,例如新增加的 Windows Forms 和 WPF、新的 JSON API、对 ARM64 架构的支持,以及全面提升的性能。对了,C# 8 也是 .NET Core 3.0 本次更新的一部分,其中包括可空引用类型(nullable)、异步流(Async Streams)和更多的模式。
除了 C# 8,.NET Core 3.0 的更新内容还包括 F# 4.7,此版本主要是对语法进行改进,并将目标平台升级至面向 .NET Standard 2.0。
.NET 团队表示 .NET Core 3.0 会兼容之前的版本,所以大家现在就可以将项目升级至 .NET Core 3.0。
.NET Core 3.0 的一些“新料”
在深入探究 .NET Core 3.0 的所有新功能之前,先来看看一些重要的改进,其中提及到了 C# 8、F# 4.7、.NET Standard 2.1、在其他发行版上的支持情况等。
在 .NET Core 3.0 稳定版发布前,它已在 dot.net 和 Bing.com 这两个网站上运行了数月,并已通过严格的测试。微软的团队也将很快在生产环境中将工作负载部署到 .NET Core 3.0 上。
许多组件的性能都获得了巨大提升,详情可查看介绍 .NET Core 3.0 性能改进的内容。
C# 8 增加了异步流(async streams)、范围类型和索引类型(range/index)、更多的模式以及可空引用类型。可空引用类型主要用于帮助我们处理无处不在的空引用异常(
NullReferenceException
),另外,框架库的底层已被注释,编译器会分析代码流,因此我们能查看null
值是否可以将其用于当前位置。F# 4.7 主要是通过使用隐式的
yield
表达式来简化一些操作,以及语法。此外还提供了对LangVersion
的支持、新增nameof
关键字,和处于预览阶段的静态类。F# 核心库的目标平台为 .NET Standard 2.0,详情点此了解。.NET Standard 2.1 增加了可以在代码中使用的类型集,它们也可同时用于 .NET Core 和 Xamarin。
.NET Core 现在已为 Windows 桌面应用提供支持、同时支持 Windows Forms 和 WPF(已开源)。WPF 设计器已属于 Visual Studio 2019 16.3 的一部分。Windows Forms 设计器则仍处于预览阶段,可从 VSIX 进行下载。
.NET Core 应用现在默认情况下就具有可执行文件。在之前的版本中,需要通过
dotnet
命令来启动应用,如dotnet myapp.dll
。不过从这个版本开始,我们可以使用特定于应用程序的可执行文件(例如myapp
或./myapp
, )来启动应用程序,具体取决于操作系统。新增高性能的 JSON API,用于读取器/写入器、对象模型和序列化方案。这些 API 基于
Span<T>
从头开始构建,使用 UTF8 来替代 UTF16(如string
),另外由于这些 API 使用了最小化的内存分配,因此带来了更好的性能,减少了垃圾回收器的工作。详情请查看 The future of JSON in .NET Core 3.0。默认情况下,垃圾回收器使用更少的内存。对于许多应用程序托管在同一服务器上的情况,此改进非常有用。此外,新版本中 GC 能更好地利用具有 64 核(或大于)的机器的核心数量。
.NET Core 强化了对 Docker 的支持,以使 .NET 应用程序在容器中能按预期且有效地运行。当容器被配置为有限的内存或 CPU 时,垃圾回收器和线程池会更好地进行适应已提供最具优化效果的运行方式。.NET Core 的 Docker 镜像体积也更小 —— 尤其是 SDK 镜像。
支持 Raspberry Pi 和 ARM 芯片,以助力 IoT 开发。其中包括远程 Visual Studio 调试器。这就意味着我们可以使用新的 GPIO API 来部署可监听传感器的应用程序,并在显示器上打印消息或图像。ASP.NET 可用于将数据暴露为 API,或作为一个在 IoT 设备启用配置的站点。
.NET Core 3.0 会被 11 月发布的 .NET Core 3.1 取代,因为后者才是 LTS 版本(至少会获得三年的技术支持),不过官方还是建议大家先升级到 .NET Core 3.0,然后再升级到 3.1,这样过渡起来更方便。
.NET Core 2.2 将于今年 12.23 到达 EOL 阶段。查看 .NET Core support policy。
.经过与 Red Hat 的多年合作,.NET Core 3.0 将随 RHEL 8 在 Red Hat Application Streams 中一起提供。
Visual Studio 用户如需在 Windows 上使用 .NET Core 3.0,需要升级至 Visual Studio 2019 16.3。
Visual Studio 用户如需在 macOS 上使用 .NET Core 3.0,需要升级至 Visual Studio for Mac 8.3。
Visual Studio Code 用户则需要使用最新版本的 C# 扩展,以确保最新的方案能够正常工作,包括针对 .NET Core 3.0 的目标平台。
.NET Core 3.0 的 Azure App Service 部署目前正在进行中。
.NET Core 3.0 的 Azure Dev Ops 部署即将推出。
.NET Core 3.0 支持的平台
Alpine: 3.9+
Debian: 9+
openSUSE: 42.3+
Fedora: 26+
Ubuntu: 16.04+
RHEL: 6+
SLES: 12+
macOS: 10.13+
Windows Client: 7, 8.1, 10 (1607+)
Windows Server: 2012 R2 SP1+
要注意的是,Windows Forms 和 WPF 应用仅支持在 Windows 上运行。
x64 on Windows, macOS, and Linux
x86 on Windows
ARM32 on Windows and Linux
ARM64 on Linux (kernel 4.14+)
注意:请确保 .NET Core 3.0 在 ARM64 上的部署使用 Linux Kernel 4.14 或更高版本。例如,Ubuntu 18.04 能满足此要求,但 16.04 却不满足。
WPF 和 Windows Forms
Visual Studio 2019 16.3 支持创建面向 .NET Core 的 WPF 应用程序,这包括新模板以及更新的 XAML 设计器和 XAML Hot Reload。
不过 Windows Forms 设计器目前尚处于预览阶段,可从此处单独下载。微软表示会在未来发布的 Visual Studio 中集成 Windows Forms 设计器。
更多内容请查看「阅读原文」。