跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • NET 5.0 RC2 发布,正式版即将在 11 月 .NET Conf 大会上发布
未分類
2020 年 10 月 24 日

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

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

資深大佬 : zoomla 8

今天( 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 年 [email protected] 内部会议的序幕。届时将有许多来自 .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 中的三个新模式是:

  • 关系模式,使用关系运算符,如 < 和 >=。
  • 逻辑模式,使用关键字 and、or、not。一个简短的例子是 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 类型。这里是为了演示逻辑模式 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 语句,而不需要重复一个变量名。这个逻辑模式也可以用下面的方式来代替,并且会更接近这篇 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 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 包名将保持不变。

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

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

Windows Arm64

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

NET 5.0 RC2 发布,正式版即将在 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

大佬有話說 (5)

  • 資深大佬 : hjahgdthab750

    土豆挂了

  • 資深大佬 : whywhywhy

    博客园已经生了。。然后挂了,,,然后又生了。。

  • 資深大佬 : qiufengshe

    图片看不到

  • 資深大佬 : wwwwzf

    [更新]

    19:49 排查后发现可能错怪了 .NET 5.0,已经重新发布了升级到 .NET 5.0 的版本进行观察。

  • 資深大佬 : typetraits

    C#真的是一门非常优秀的语言,可惜在国内的生态没建立起来,用的人实在太少了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具