为何Visual Studio无法自动生成Community.Toolkit.MVVM代码,仅构建时生成?
CommunityToolkit.MVVM代码生成器仅构建后生效,实时生成失效问题解决
环境信息
- Visual Studio 2022
- .NET 8
- WPF 项目模板
- CommunityToolkit.MVVM 8.3.2
问题详情
用[ObservableProperty]标记的字段(比如示例里的_copyright),对应的属性(Copyright)只有在构建解决方案或者手动触发生成器之后才会生成。没构建的时候,IDE识别不出这些生成的属性,代码直接报红。所有在用的WPF项目都有这问题,但今年春天用8.2.2版本的时候完全正常,之后也没改过这些项目的配置。
示例代码:
using CommunityToolkit.Mvvm.ComponentModel; namespace SampleCommunityToolkit.ViewModels; public partial class HomeViewModel : ObservableObject { [ObservableProperty] private string? _title; [ObservableProperty] private string? _copyright; public HomeViewModel() { Title = "Hello World App"; // 未构建时这里会报错,因为Title属性还没生成 } }
疑问解答
1. 是否是修改了Visual Studio的设置?
大概率是——要么是不小心改了VS的实时代码生成(增量生成)设置,要么是VS更新后默认配置变了,导致增量生成失效。
2. 如何修复该问题?
按以下步骤挨个试:
- 重启VS+清理项目:先关掉VS,删掉项目目录下的
bin、obj文件夹,重新打开项目后改个字段,看实时生成能不能恢复。 - 检查增量代码生成开关:
- 打开VS的「工具」→「选项」→「文本编辑器」→「C#」→「高级」
- 确保启用增量代码生成和启用完整解决方案分析这两个选项是勾上的
- 回退到8.2.2版本验证:在NuGet包里卸载8.3.2,装回8.2.2,如果问题消失,那就是新版本的兼容性问题,暂时先用旧版本等官方修复就行。
- 手动触发生成器:要是实时生成还是不行,右键项目→「属性」→「生成」,点「触发生成器」按钮强制运行;或者直接按
Ctrl+Shift+B快速构建项目。 - 检查项目生成器配置:打开项目的
.csproj文件,确认有没有禁用CommunityToolkit的生成器,确保有这段配置(没有就加上):<ItemGroup> <Analyzer Include="CommunityToolkit.Mvvm.SourceGenerators" /> </ItemGroup>
3. 实现工具包时是否遗漏了什么?
从示例代码看,实现完全没问题:继承了ObservableObject、用partial修饰类、加了[ObservableProperty]特性,没漏必要步骤。问题出在IDE或者版本兼容上,不是代码写得不对。
内容的提问来源于stack exchange,提问作者karwenzman
相关产品推荐
相关产品推荐

