我们很高兴地宣布 .NET 社区工具包 8.2.1 版本正式发布!这个新版本包括所有库的大量 QoL 改进、对 MVVM Toolkit 源生成器的更多性能优化、新的代码修复程序和改进的诊断等等!
我们要特别感谢所有提供宝贵反馈的社区成员,以帮助确定此新版本的工作项目的优先级。您的贡献和错误报告不断帮助我们在每个版本中使 .NET 社区工具包变得更好 — 您是最棒的!
.NET 社区工具包中有什么?
.NET 社区工具包包括以下库:
CommunityToolkit.Common
CommunityToolkit.Mvvm
(又名“微软 MVVM 工具包”)CommunityToolkit.Diagnostics
CommunityToolkit.HighPerformance
有关 .NET 社区工具包历史的更多详细信息,请参阅我们之前的 8.0.0 公告帖子的链接。
以下是 .NET 社区工具包新 8.2.1 版本中包含的主要更改的详细信息。此版本主要侧重于增量改进:没有新功能,但有大量调整和修复!
新的分析器和代码修复器[RelayCommand]
该属性(请参阅此处的[RelayCommand]
文档)可以自动处理异步方法,并且在这种情况下它将使用接口(以及相应的异步命令类型)。不过,开发人员不容易发现此功能,许多人只是制作他们的命令方法。这也意味着他们无法利用异步命令提供的所有附加功能(例如进度报告和并发控制)。IAsyncRelayCommand
async void
为了帮助解决这个问题,MVVM 工具包的 8.2.1 版本附带了一个全新的分析器,它将针对async void
用[RelayCommand]
. 为了让事情变得更加简单易用,还有一个新的代码修复程序会自动为您重构代码 - 只需单击灯泡图标,让 Roslyn 为您完成工作!
在这里,您可以看到针对与命令关联的方法显示的新生成的诊断信息async void
,以及 Visual Studio 中相应的代码修复程序 UI,其中包含更改预览。它还会自动using
在文件顶部添加必要的语句,以防Task
不在范围内。就像 MVVM Toolkit 中的其他代码修复程序一样,您只需单击一下即可轻松将其应用到整个项目或解决方案中的所有位置!
其他变更和改进
Memory2D<T>
修复索引切片实例时的 AV ( #675 ):在某些情况下,在切片实例后索引元素时可能会触发访问冲突Memory2D<T>
。现在这个问题已经解决了,感谢mahalex的报告!- 修复具有负枚举值的转发属性( #681 ):使用具有负值的枚举成员将不再导致 MVVM Toolkit 生成器生成的可观察属性出现问题。感谢n-coelho-cerinnov报告此事!
- 修复转发无效属性时生成器崩溃的问题( #683 ):尝试转发未正确引用的属性现在将正常失败并生成易于理解的错误消息。
- 修复
ObservableValidator
生成器以检测继承的属性(#616):用于验证属性的生成器将不再意外忽略目标视图模型的基本类型的属性。感谢dgellow报告此事! - 在使用 MVVM Toolkit 的 packages.config 时添加警告(#695):MVVM Toolkit 生成器仅在使用时才工作
<PackageReference>
(这是 SDK 的已知限制,并且是设计使然),但之前没有明确说明为什么生成器不为尝试从使用 的项目中使用它们的用户运行packages.config
。MVVM 工具包现在附带改进的诊断功能,可以在这种情况下生成有用的警告消息。感谢您smaugbend报告此事! - 在生成器中更频繁地检查取消(#703):这应该会导致使用 MVVM Toolkit 时 IDE 响应能力出现小幅改进。
- 删除不必要的临时数组分配(#719):对 MVVM Toolkit 源生成器的另一个小内存优化。
- 处理
[ObservableProperty]
带有关键字标识符的字段(#710[ObservableProperty]
):如果用 注释的字段使用源中已转义的关键字标识符(例如) ,则生成器将不再生成无效代码@event
。感谢Get0457报告此事!
注意:旧版本 Roslyn 中的源生成器存在一个已知问题,可能会导致 IntelliSense 有时无法对生成的成员正常工作(请参阅#493和相关的Roslyn 跟踪问题)。这个问题最终在 VS 2022 17.7 中得到修复,目前处于预览阶段。如果您在使用 MVVM Toolkit 时遇到任何问题,请务必尝试最新的 VS 17.7 预览版!
其他变化
您可以从GitHub 发布页面查看此版本的完整变更日志。
今天就开始吧!
您可以在我们的GitHub 存储库中找到所有源代码,在MS learn上找到一些手写文档,并在 .NET API 浏览器网站中找到完整的 API 参考。如果您想做出贡献,请随时提出问题或联系我们,让我们了解您的体验!要关注 Twitter 上的对话,请使用 #CommunityToolkit 主题标签。您的所有反馈都极大地有助于塑造这些库的方向,因此请务必分享它们!
快乐编码!
文章作者 | Sergio Pedri(塞尔吉奥·佩德里)