.NET 5.0 RC2 发布,正式版即将在 11 月 .NET Conf 大会上发布 (2)

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

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

这里不知道 user 变量的类型,所以测试它是不是 Mycroft 类型,如果是,则分配给 m。同时判断 Mycroft 对象上的一个属性是否是一个 object 类型。这里是为了演示逻辑模式 not 的使用,其实用 is null 是一样的效果。

另一种 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 语句,而不需要重复一个变量名。这个逻辑模式也可以用下面的方式来代替,并且会更接近中演示的语法,它们是等价的。

(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 表达式中自由地混合这些方法。希望这能帮助一些人,至少对我有帮助。

如果你对这个应用的功能很好奇,我已经把程序的输出保存在 中。你也可以自己运行这个程序。它需要 .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 RC2 发布,正式版即将在 11 月 .NET Conf 大会上发布

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

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

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

.NET 5.0 RC2 发布,正式版即将在 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 RC2 发布,正式版即将在 11 月 .NET Conf 大会上发布

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

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

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

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

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

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

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

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

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

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgygj.html