VS2019开发C# WPF项目.AssemblyInfo.cs报重复属性错误如何解决
问题根因
这个报错本质是C#编译器编译项目时,拿到了多份内容完全相同的程序集特性声明,VS2019下WPF项目触发这个问题的常见场景只有3种:
- 项目属于SDK风格格式(VS2019新建WPF项目的默认格式),默认会在编译时自动在
obj目录生成一份AssemblyInfo.cs文件写入程序集特性,如果你手动在项目其他目录存放了手写的AssemblyInfo.cs、或者误操作把obj目录下自动生成的AssemblyInfo.cs包含进了项目编译列表,编译器就会同时加载两份完全一致的特性声明触发报错。 - 之前反复迁移项目、复制项目文件的时候,不小心把多份相同的
AssemblyInfo.cs复制到了项目的不同目录下,并且全部被纳入了编译范围。 - 项目的
.csproj配置文件里存在重复的<GenerateAssemblyInfo>配置节点,或者之前旧版本项目的残留配置导致生成逻辑异常,重复生成了特性声明。
你新建空白WPF项目无法复现是正常的:新项目没有历史残留文件、配置是默认正确状态,编译缓存也是全新的,自然不会触发重复加载问题。
分步解决方法(不需要提前熟悉配置文件,操作无破坏性)
- 第一步先清理编译缓存:完全关闭Visual Studio,打开主项目的根文件夹,找到
bin和obj两个文件夹直接全部删除,这两个文件夹存放的全是编译过程自动生成的临时文件,删除不会对项目源码造成任何影响。删除完成后重新打开VS生成项目,缓存错乱导致的重复报错大概率会直接消失。 - 如果清理缓存后报错仍存在,打开VS右侧的解决方案资源管理器,点击面板顶部的「显示所有文件」按钮(带虚线边框的文件夹图标),在整个项目范围内搜索所有名为
AssemblyInfo.cs的文件:- 如果你用的是默认SDK风格的WPF项目:正常情况下仅
obj/Debug或obj/Release路径下的那份AssemblyInfo.cs是编译流程自动生成的,其余所有出现在Properties文件夹、你自定义业务目录下的同名文件,右键选择「从项目中排除」即可,不要直接删除文件,先排除后重新编译,确认报错消失后再按需处理冗余文件。 - 如果你用的是传统.NET Framework版本的WPF项目:正常情况下仅
Properties文件夹下存在一份手动维护的AssemblyInfo.cs,其余所有出现在obj目录、其他业务目录下的同名AssemblyInfo.cs,全部右键从项目中排除即可。
- 如果你用的是默认SDK风格的WPF项目:正常情况下仅
- 完成上述操作后如果仍有报错,再修改项目配置,操作风险极低:右键解决方案资源管理器里的项目名称,选择「编辑项目文件」,在打开的csproj配置里查找
<GenerateAssemblyInfo>节点:- 如果存在多个相同的节点,只保留一个即可,删除其余重复节点。
- 如果你希望保留自己手写的
AssemblyInfo.cs文件,就把保留的节点值设为false,配置写法为<GenerateAssemblyInfo>false</GenerateAssemblyInfo>,这会告诉VS不要自动生成程序集特性文件,完全使用你手写的内容。 - 如果你希望用VS自动生成的程序集特性,就把节点值设为
true,确保项目里没有其他手动存放的AssemblyInfo.cs被纳入编译范围即可。
注意:不要尝试直接修改
obj目录下自动生成的AssemblyInfo.cs文件,该文件会在每次编译时被完全覆盖重写,任何修改都不会生效。
内容的提问来源于stack exchange,提问作者Ophir Botzer
相关产品推荐
相关产品推荐

