.NET 社区工具包 8.2 发布,带来代码修复器、性能改进


.NET Community Toolkit 8.2 版正式发布!新版本包括在运行时和 MVVM Toolkit 源码生成器中的性能改进、新代码修复程序、新的用户请求功能等内容。

.NET 社区工具包是一组适用于所有 .NET 开发人员,且与不绑定 UI 平台的帮助程序和 API。该工具包由 Microsoft 维护和发布,是 .NET 基金会的一部分,它被多个微软内部项目和应用程序使用,例如 Microsoft Store。

.NET 社区工具包的所有库最初都是 Windows 社区工具包的一部分,但随着时间的推移,仅针对 .NET 且不特定于 Windows 的 API 数量不断增加,微软决定将 .NET 相关的内容拆分到一个单独的项目中,以便它们可以独立发展,.NET Community Toolkit 由此诞生。

[RelayCommand] 的自定义属性

新的 8.2.0 版本的 MVVM 工具包在使用 [RelayCommand] 时包括对自定义属性的支持,利用原生的 field:  property: C# 语法来指示自定义属性的目标。这样一来,在使用 [RelayCommand] 生成 MVVM 命令时,可以完全控制所有生成成员的属性。

比如

[RelayCommand]
[property: JsonIgnore]
private void DoWork()
{
// Do some work here...
}

会生成如下成员,且生成的 DoWorkCommand 属性具有指定的属性

private RelayCommand? _doWorkCommand;

[JsonIgnore]
public IRelayCommand DoWorkCommand => _doWorkCommand ??= new RelayCommand(DoWork);

相关文档

新的 [ObservableProperty] 更改 hook

MVVM 中一个相对常见的场景是有一些“选择的项目”可观察属性,例如当前选择的用户,或嵌套的视图模型。当此属性的值发生变化时,还必须对新旧实例进行一些调整。例如,设置一些“selected”属性,或者订阅事件。

以前,在这种情况下使用 [ObservableProperty] 并不理想,因为它没有必要的基础设施,来轻松注入此类逻辑以对设置的旧值和新值执行必要的状态更改。

为了解决这个问题,从 MVVM 工具包的 8.2 版本开始,为所有 [ObservableProperty] 字段生成了两个新的属性更改 hook。示例:

[ObservableProperty]
private DocumentViewModel _selectedDocument;

现在将生成如下代码:

public DocumentViewModel SelectedDocument
{
get => _selectedDocument;
set
{
if (!EqualityComparer<DocumentViewModel>.Default.Equals(_selectedDocument, value))
{
DocumentViewModel? oldValue = _selectedDocument;
OnNameChanging(value);
OnNameChanging(oldValue, value);
OnPropertyChanging();
_selectedDocument = value;
OnNameChanged(value);
OnNameChanged(oldValue, value);
OnPropertyChanged();
}
}
}

partial void OnSelectedDocumentChanging(DocumentViewModel value);
partial void OnSelectedDocumentChanged(DocumentViewModel value);

partial void OnSelectedDocumentChanging(DocumentViewModel? oldValue, DocumentViewModel newValue);
partial void OnSelectedDocumentChanged(DocumentViewModel? oldValue, DocumentViewModel newValue);

注意正在生成的两个新的“OnPropertyNameChanging”和“Changed”方法,这两个提供了易于使用的 hook,用于注入在每个属性更改事件上触发的代码,且可以修改正在设置的旧值和新值。

MVVM 工具包代码修复器 

之前版本的 MVVM Toolkit 添加了两个新的诊断分析器,它们会在错误访问标有 [ObservableProperty] 的字段,以及在使用声明具有 [ObservableProperty] 和类似属性的类型时产生警告。

在 8.2 版本中,这两个分析器还包括内置的代码修复器。只需将鼠标悬停在 IntelliSense 灯泡上,选择代码修复,该功能会自动应用所有更改,以使代码恢复到正确的状态。支持批量修复:

MVVM 工具包源代码生成器优化

MVVM Toolkit 8.2 还对其源代码生成器进行了一些性能改进。这一次重点是优化增量管道,以最大限度地减少内存使用,并确保不会在并发执行中保持不必要的对象。

以下是一些用于改进这一点的 PR:

  • 将剩余的诊断移至分析器 ( #581 ):MVVM 工具包中的另外两个诊断已移至诊断分析器,该分析器可以同时运行并在进程外运行。
  • 在分析器中尽早解析符号 ( #587 ):所有必要的分析器符号现在都在初始回调设置期间解析,加快了每个编译实例中的回调执行。

 

其他改动和改进可在发布公告中查阅。


相關推薦

2022-12-07

PhpStorm 2022.3 现已正式发布,此次更新带来了新 UI 的预览、完整的 PHP 8.2 支持、数据库工具中的 Redis 支持、PHP 的代码视觉、快速修复预览、Xdebug 配置验证、对 ParaTest 的支持、PHPDoc 的阅读器模式以及许多其他功能。 新 UI 

2022-10-19

PHP 包升级到 PHP 8.2。与大多数软件包一样,Fedora Linux 在发布时往往总是附带最新的 PHP 版本。这意味着在明年春天,Fedora Linux 38 将为那些想在这个由 Red Hat 赞助的 现代 Linux 发行版上运行 LAMP 的用户提供 PHP 8.2。 PHP 8.2 包

2023-08-24

非常感谢 Xmake 的每位贡献者,我们的包仓库基本上都是社区贡献者贡献进来的。 尤其是 @xq114, @star-hengxing, @SirLynix 帮忙贡献了大量的包,非常感谢~ 还有,Xmake 仓库 Commits 也突破到了 12k,一直在持续快速迭代中。下面我们简单

2022-08-11

ual Studio 的所有并行版本。 Microsoft Teams 开发工具 (Teams 工具包) Microsoft Teams 应用项目模板已得到改进,现在会创建各种类型的 Teams 应用,包括通知机器人、命令机器人、选项卡应用和消息扩展。 现在可以使用 Teams Toolkit fo

2022-08-25

更新将添加对它的支持。 测试改进 ParaTest 支持 ParaTest 社区实现了一个 API,能够在 PhpStorm 中支持使用 ParaTest 并行运行测试。 Prophecy 支持 PhpStorm v2022.2 中添加了对 Mockery 的支持,下一个版本将支持一个更有名的测

2022-07-14

持。 在 .NET 7 中,开发团队对实现进行了改进并响应了社区的反馈。有关更改和可用 API 的更多信息,点此查看。 详情查看发布公告。

2022-06-16

支持。 在 .NET 7 中,开发团队对实现进行了改进并响应了社区的反馈。有关更改和可用 API 的更多信息,点此查看。 详情查看发布公告。

2023-02-24

数据采集ETL&流批一体化计算工具 bboss v6.8.2 发布。 bboss-datatran由 bboss 开源的数据采集同步ETL工具,提供数据采集、数据清洗转换处理入库以及流批一体化数据指标统计计算处理功能。 v6.8.2功能改进 FTP文件输入/

2021-11-09

nbsp;已正式推出,并称其为迄今为止最快的 .NET 版本。 发布公告提到,.NET 6 是首个原生支持 Apple Silicon (Arm64) 的版本,并且还针对 Windows Arm64 进行了改进。.NET 团队构建了一个新的动态配置文件引导优化 (PGO) 系统,该系统可提

2022-06-29

的一个新的变化:Vim9 Script。 上一个版本是 2019 年 12 月发布的 8.2 版。由于最新的源代码总是会在 GitHub 上提供,因此许多用户已经安装了后来的补丁版本(有超过 5000 个),这些变化也已经被许多用户试用过了。在 8.2 的基础

2022-11-23

何环境中运行的现代开源高性能 RPC 框架。gRPC 1.51.0 现已发布,包含了一些完善、改进和错误修复;具体更新内容如下: 核心 升级核心版本到 202211082118。 ( #31585 ) c-ares DNS 解析器:修复解析超时/取消和 fd 可读性之间的逻

2023-08-06

书文档中心以获取更多信息 开源与共建 建设洛书开源社区,让我们一起创造更加美好的未来! 洛书是一门新生的开源编程语言,为了更好地推动洛书编程语言的发展,我们诚邀广大开发人员加入洛书开源社区,共同为开源事

2022-09-15

擎的每一行代码,都是他们的。Godot 的开发完全独立且由社区驱动,允许用户以帮助塑造他们的引擎来满足他们的期望。它受到 软件自由保护 非营利组织的支持。 摘自 Godot 中文文档:https://docs.godotengine.org/zh_CN/latest

2023-02-19

昉星光2开发板上进行了验证。此版本携带了QEMU未经正式发布的RISCV代码生成BUG的修复补丁,以及Wine CE作者对QEMU x86输入的GDT错误实现导致的BUG的修复补丁(暂未合入主分支)。因此Wine CE是全球第一款运行于RISCV架构平台的Windows