.NET MAUI使用CommunityToolkit.MVVM报命名空间类型重复定义错误
问题原因
该报错代表MyApp.ViewModels命名空间下存在两个名为ProfilePopupViewModel的类定义,结合你使用CommunityToolkit.MVVM的场景,常见诱因有两个:
- 项目中存在重复的类定义:比如重复创建了同名的视图模型文件、复制代码时残留了旧的同名类,即使两个文件存放在不同文件夹,只要声明的命名空间一致,就会触发冲突。
- 视图模型类缺少
partial关键字:你贴出的代码中ProfilePopupViewModel没有声明为partial类,而CommunityToolkit.MVVM的源生成器会在编译时自动生成同名的partial类,来实现[ObservableProperty]标记字段对应的公开属性逻辑。如果你的类不是partial类型,编译器会把你手写的类和源生成的类判定为两个独立的同名类,直接抛出重复定义错误,这也是你当前代码最直接的问题。
解决方案
按以下顺序排查修复即可:
- 全局搜索项目内所有
class ProfilePopupViewModel的定义,删除多余的残留旧文件,或者修改多余类的命名空间、类名,保证同命名空间下只有一个该类的定义。 - 给
ProfilePopupViewModel类添加partial关键字,修正后的代码如下:
// 必须添加partial关键字,允许源生成器合并生成的代码 public partial class ProfilePopupViewModel : ObservableRecipient { private Profile profile; [ObservableProperty] private string id; [ObservableProperty] private string name; [ObservableProperty] private DateOnly birthDate; [ObservableProperty] private int work; }
注:代码中同时将
private Profile Profile;修改为小驼峰命名private Profile profile;,符合C#字段命名规范,避免后续给该字段加源生成特性时出现属性名和类型名冲突的问题。
- 如果上述操作完成后仍报错,关闭开发环境,删除项目根目录下的
bin、obj文件夹,重新打开项目执行重新生成,清除历史编译残留的旧生成文件缓存即可。
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

