• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

.NET 5.0 RC 2 发布,正式版将在 11 月 .NET Conf 大会上发布

互联网 diligentman 7天前 11次浏览

原文:http://dwz.win/ThX
作者:Richard
翻译:精致码农-王亮
说明:
1. 本译文舍弃了少许我实在不知道如何翻译但又不是很重要的语句。
2. 本文有不少超链接,由于微信公众号和头条平台外链会被剔除 URL 地址,所以原来本是超链接的内容会显示为纯文本,如果你需要这些信息可以移步到我的知乎和博客园阅读(搜索“精致码农”可找到我)。

今天(10月13日)我们发布了 .NET 5.0 候选版本 2(RC2),它是 11 月 .NET 5.0 正式版发布前的最后一个 RC 版本。RC2 是一个“上线”版本,表示你可以在生产环境中使用它。与此同时,我们正在找寻任何遗漏的关键 Bug 报告,这些 Bug 应该在最终发布前得到修复。

我们今天也发布了 ASP.NET Core 和 EF Core 的 RC2 版本。

你可以下载适用于 Windows、macOS 和 Linux 的 .NET 5.0 版本:

  • 安装程序和二进制包

  • 容器镜像

  • 快速安装程序

  • 发布说明

  • 已知问题

  • GitHub Issue 跟踪

你需要最新的预览版 Visual Studio (包括 Visual Studio for Mac) 才能使用 .NET 5.0。

.NET 5.0 包括许多改进,特别是单文件应用程序、更小的容器镜像、功能更强的 JsonSerializer API、一套完整的可空引用类型标注、新的Target Framework 名称,以及对 Windows ARM64 的支持。在 .NET 库、GC 和 JIT 中,性能得到了极大的提高。我们花了很大的工作在 ARM64 的性能上,它有了更好的吞吐量和更小的二进制文件。.NET 5.0 包含了新的语言版本:C# 9.0 和 F# 5.0。你可以查看一些 .NET 5.0 示例,以便你可以亲自尝试这些功能。

今天是个大好日子,因为我们将拉开 2020 年 .NET@Microsoft 内部会议的序幕。届时将有许多来自 .NET 团队的演讲者,也有来自服务团队的开发人员和架构师,他们依靠 .NET 来驱动微软云,分享他们的胜利,也分享他们的挑战。我的演讲(不出所料)是“.NET 5.0 中有什么新内容”。我的演讲将很简单,会涵盖我的 .NET 5.0 博文所讲到的内容!这将是一场精彩的演讲。更重要的是,这次会议是我们的机会,让我们说明为什么微软团队应该在 .NET 5.0 发布后尽快采用它。我所知道的至少有一个大型团队正在生产中运行 RC1。微软官方.NET网站 从 Preview 1 开始就一直在运行.NET 5.0,现在正在运行 RC2。本周微软团队向我们展示的案例,会与我在所有这些 .NET 5.0 博客文章中向你展示的案例非常相似。.NET 5.0 是一个伟大的版本,它将从根本上改善你的应用程序。

说到会议,请记住 .NET Conf 2020 的日期(译注:11月10日至12日)。今年,.NET 5.0 将在 .NET Conf 2020 上发布!请来庆祝并了解新版本。我们还将庆祝我们的 10 周年纪念日,我们正在努力创造更多的惊喜,值得你的期待。

就像我为 .NET 5.0 Preview 8 和 .NET 5.0 RC1 所做的那样,我选择了一些功能来更深入地介绍,并让你了解如何在实际情况中使用它们。这篇文章专门介绍 C# 9 模式匹配、Windows ARM64 和 ClickOnce。

C# 9 模式匹配

模式匹配是在 C# 7.0 中加入的语言特性。不妨让 Mads 重新介绍一下这个概念,这是他最初介绍这个特性时的说法:

C# 7.0 引入了模式的概念,抽象地说,模式是一种语法元素,它可以测试一个值是否具有一定的“形状”,当它具有一定的“形状”时,就从该值中提取信息。

这是一个非常好的描述,完美的措辞。

C# 团队在 C# 7、C# 8 和 C# 9 的每个版本中都添加了新的模式。在这篇文章中,你将看到这些语言版本中的每一种模式,但我们将重点关注 C# 9 中的新模式。

C# 9 中三个新模式是:

  • 关系模式,使用关系运算符,如 < 和 >=

  • 逻辑模式,使用关键字 andornot。一个简短的例子是 foo is not null。当你想在一个模式中比较多个事物时,这种类型的模式是最有用的。

  • 简单类型模式,只使用一个类型,而不使用其他语法进行匹配。

我是 BBC 夏洛克系列的忠实粉丝。我写了一个小程序,可以决定一个给定的角色是否应该访问该系列中的某个内容。很简单,这个应用的编写有两个限制条件:忠于剧中的时间线和人物,这是一个很好的模式演示。如果有的话,我怀疑我在第二个约束条件上最失败。在一个特定的应用程序中(尤其是这样一个小应用程序),你会发现一套比人们预期的更广泛的模式和风格。

当我在使用模式时,我有时想做一些与我所熟悉的模式实现稍微不同的事情,但不知道如何扩展该模式来满足我的目标。鉴于这个示例,我希望你能发现更多的方法,也许你以前不知道这些可以扩展你熟悉的模式的技巧。

应用内有两个 switch 表达式,让我们从两个中较小的一个开始。

public static bool IsAccessOKAskMycroft(Person person) => person switch
{
    // Type pattern
    OpenCaseFile f when f.Name == "Jim Moriarty"    => true,
    // Simple type pattern
    Mycroft                                         => true,
    _                                               => false,
};

前两种模式是类型模式。第一个模式是 C# 8 就支持的。第二种–Mycroft–是新的简单类型模式的一个例子。在 C# 8 中,这个模式需要一个标识符,就像第一个模式一样,或者至少需要一个弃元,比如 Mycroft _。在 C# 9 中,不再需要标识符。是的, Mycroft 是应用程序中的一个类型。

在我向你展示另一个 switch 表达式之前,让我们再简单一点。下面的 if 语句演示了一个逻辑模式,是两个使用 is 的类型模式实例。

if (user is Mycroft m && m.CaresAbout is not object)
{
    Console.WriteLine("Mycroft dissapoints us again.");
}

这里不知道 user 变量的类型,所以测试它是不是 Mycroft 类型,如果是,则分配给 m。同时判断 Mycroft 对象上的一个属性是否是一个 object 类型。

另一种 switch 表达式则要宽泛得多。

public static bool IsAccessOkOfficial(Person user, Content content, int season)
    => (user, content, season) switch
{
    // Tuple + property patterns
    ({Type: Child}, {Type: ChildsPlay}, _)          => true,
    ({Type: Child}, _, _)                           => false,
    (_ , {Type: Public}, _)                         => true,
    ({Type: Monarch}, {Type: ForHerEyesOnly}, _)    => true,
    // Tuple + type patterns
    (OpenCaseFile f, {Type: ChildsPlay}, 4) when f.Name == "Sherlock Holmes"  => true,
    // Property and type patterns
    {Item1: OpenCaseFile {Type: var type}, Item2: {Name: var name}}
        when type == PoorlyDefined && name.Contains("Sherrinford") && season >= 3 => true,
    // Tuple and type patterns
    (OpenCaseFile, var c, 4) when c.Name.Contains("Sherrinford")              => true,
    // Tuple, Type, Property and logical patterns
    (OpenCaseFile {RiskLevel: >50 and <100 }, {Type: StateSecret}, 3) => true,
    _                                               => false,
};

唯一真正有趣的模式是最后一个模式(在弃元-之前),它测试 Risklevel 是否 >50 且 <100。有很多次我都想用这种形式的逻辑模式语法写一个 if 语句,而不需要重复一个变量名。这个逻辑模式也可以用下面的方式来代替,并且会更接近这篇 C# 9 博文中演示的语法,它们是等价的。

(OpenCaseFile {RiskLevel: var riskLevel}, {Type: StateSecret}, 3) when riskLevel switch
{
    >50 and <100        => true,
    _                   => false
}

我远不是一个语言专家,Jared Parsons 和 Andy Gocke 在本文这一部分给了我很多帮助,谢谢!我的关键绊脚石是一个元组的 switch。有时,位置模式很不方便,你只想使用元组的一部分。这就是属性模式的作用,你可以在下面的代码中看到。

{Item1: OpenCaseFile {Type: var type}, Item2: {Name: var name}}
    when type == PoorlyDefined && name.Contains("Sherrinford") && season >= 3 => true,

这里面有相当多的问题。关键的一点是,这里测试的是元组属性,而不是按位置匹配元组。这种方法提供了更多的灵活性。你可以在一个给定的 switch 表达式中自由地混合这些方法。希望这能帮助一些人,至少对我有帮助。

如果你对这个应用的功能很好奇,我已经把程序的输出保存在 app gist 中。你也可以自己运行这个程序。它需要 .NET 5.0 RC2 才能运行。

ClickOnce

多年来,ClickOnce 一直是一个流行的 .NET 部署选项。现在它已支持为 .NET Core 3.1 和 .NET 5.0 Windows 应用程序。当我们在 .NET Core 3.0 中添加了 Windows Forms 和 WPF 支持时,我们就知道很多人会希望使用 ClickOnce 来部署应用程序。在过去的一年里,.NET 和 Visual Studio 团队共同合作,在命令行和 Visual Studio 中启用了 ClickOnce 发布。

我们从项目一开始就有两个目标:

  • 在 Visual Studio 中实现熟悉的 ClickOnce 体验。

  • 使用 MSBuild 或 Mage 工具,通过命令行流程为 ClickOnce 发布启用现代 CI/CD。

用图片向你展示体验是最简单的。

我们先从 Visual Studio 的体验开始,它是以项目发布为中心的。

.NET 5.0 RC 2 发布,正式版将在 11 月 .NET Conf 大会上发布

我们目前支持的主要部署模式是框架依赖型应用。很容易采取依赖 .NET 桌面运行时(就是包含 WPF 和 Windows Forms 的那个)。如果需要的话,你的 ClickOnce 安装程序将在用户机器上安装 .NET 运行时。我们还打算支持独立的和单文件的应用程序。

.NET 5.0 RC 2 发布,正式版将在 11 月 .NET Conf 大会上发布

你可能会想知道,你是否还能利用 ClickOnce 的离线和更新功能。是的,你可以。

.NET 5.0 RC 2 发布,正式版将在 11 月 .NET Conf 大会上发布

包括相同的安装位置和清单签署功能。如果你有严格的签名要求,你会喜欢上这个新的体验。

现在,让我们切换到 Mage 的命令行体验。

Mage 最大的变化是,它现在是一个 .NET 工具,发布在 NuGet 上。这意味着你不需要在你的机器上安装任何特殊的东西。你只需要 .NET 5.0 SDK,然后你就可以把 Mage 作为一个 .NET 工具安装。你也可以用它来发布 .NET 框架的应用程序,不过,SHA1 签名和部分信任支持已经被移除。

Mage 的安装命令如下:

dotnet tool install -g Microsoft.DotNet.Mage

用以下命令配置并发布示例应用程序:

.NET 5.0 RC 2 发布,正式版将在 11 月 .NET Conf 大会上发布

下面一条命令将启动ClickOnce应用程序:

.NET 5.0 RC 2 发布,正式版将在 11 月 .NET Conf 大会上发布

然后出现熟悉的 ClickOnce 安装对话框:

.NET 5.0 RC 2 发布,正式版将在 11 月 .NET Conf 大会上发布

安装应用后,会启动应用:

.NET 5.0 RC 2 发布,正式版将在 11 月 .NET Conf 大会上发布

重新构建并重新发布应用程序后,用户将看到一个更新对话框:

.NET 5.0 RC 2 发布,正式版将在 11 月 .NET Conf 大会上发布

更新后的应用程序将被启动。

注意:Mage .NET 工具的名称将从 mage.net 改为 dotnet-mage,NuGet 包名将保持不变。

这个围绕 ClickOnce 发布和安装的快速指南应该会让你对如何使用 ClickOnce 有一个好的认识。我们的意图是与使用现有 .NET 框架的 ClickOnce 支持有一样的体验。如果你发现我们没有达到这个目标,请告诉我们。

ClickOnce 浏览器集成与 .NET Framework 相同,在 Edge 和 Internet Explorer 中得到支持。如果支持其他浏览器对你的用户有多重要,也请告诉我们。

Windows Arm64

MSI 安装程序现在可以用于 Windows Arm64,你可以从下面的 .NET 5.0 SDK 安装程序图片中看到。

.NET 5.0 RC 2 发布,正式版将在 11 月 .NET Conf 大会上发布

为了进一步证明这一点,我在 Arm64 机器上运行 dotnet-runtimeinfo 工具来演示配置。

C:Usersrich>dotnet tool install -g dotnet-runtimeinfo
You can invoke the tool using the following command: dotnet-runtimeinfo
Tool 'dotnet-runtimeinfo' (version '1.0.2') was successfully installed.

C:Usersrich>dotnet-runtimeinfo
**.NET information
Version: 5.0.0
FrameworkDescription: .NET 5.0.0-rc.2.20475.5
Libraries version: 5.0.0-rc.2.20475.5
Libraries hash: c5a3f49c88d3d907a56ec8d18f783426de5144e9

**Environment information
OSDescription: Microsoft Windows 10.0.18362
OSVersion: Microsoft Windows NT 10.0.18362.0
OSArchitecture: Arm64
ProcessorCount: 8

.NET 5.0 SDK 目前不包含 Windows Arm64 上的 Windows 桌面组件–Windows Forms 和 WPF。这一迟来的变化最初是在 .NET 5.0 Preview 8 的帖子中分享的。我们希望在 5.0 服务更新中为 Windows Arm64 添加 Windows 桌面包,我们目前还没有确定具体的日期。目前,Windows Arm64 上支持 SDK、控制台和 ASP .NET Core 应用程序。

结束

我们现在非常接近完成 5.0 这个版本,并已将其传递出去以供广泛的生产使用。我们相信它已经准备好了。它在微软的生产环境中使用,已经给我们带来了很大的信心。我们期待你有机会在自己的环境中真正使用 .NET 5.0。

我们已经很久没有分享我们的社交媒体了,敬请关注我们的 dotnet 维护信息:

  • Twitter

  • Facebook

精致码农

带你洞悉编程与架构

.NET 5.0 RC 2 发布,正式版将在 11 月 .NET Conf 大会上发布

↑长按图片识别二维码关注,不要错过网海相遇的缘分


喜欢 (0)