Visual Studio自动在ItemGroup中移除Razor组件如何解决?
问题成因
这个自动追加Remove配置的行为不是Visual Studio的bug,是Microsoft.NET.Sdk.Razor(Blazor/Razor页面项目默认引用的SDK)的项管理机制触发的:
- SDK默认会自动递归扫描项目目录,把所有.razor/.cshtml文件按规则纳入Content、RazorGenerate等项集合,参与编译和发布
- 当SDK检测到目标文件存在项定义冲突:比如文件被重复包含、文件生成操作被手动改成过非Content值、项目里存在自定义通配符匹配规则和默认规则重叠、项目系统缓存了旧的文件属性标记时,就会自动生成对应的Remove配置,避免重复项导致编译报错
注意:不要用注释的方式保留这些Remove配置,VS每次重算项目配置时都会检测被注释的失效规则,重新生成可生效的Remove行,排查到根因后直接删除这些冗余配置即可。
解决方法
按优先级从高到低操作,大部分情况前两步就能解决问题:
- 清理项目缓存
完全关闭Visual Studio,删除解决方案根目录下的隐藏.vs文件夹,同时删除对应项目目录下的bin、obj文件夹,重新打开解决方案后直接删掉自动生成的Remove配置即可,缓存导致的识别异常这一步就能解决。 - 核对问题文件的生成操作
在解决方案资源管理器里找到出问题的两个razor文件(Pages\Publishers\PublishersList.razor、Pages\Components\PublisherForm.razor),右键打开属性面板,确认生成操作设置为「内容」,复制到输出目录设置为「不复制」,保存后删掉冗余的Remove配置行,重启VS即可。 - 排查自定义项规则冲突
打开.csproj项目文件,检查有没有自己写的重复通配符规则,比如<Content Include="Pages\**\*.razor" />这类和SDK默认包含规则重叠的配置,删掉这类自定义重复规则即可,不要重复声明SDK已经默认处理的项包含逻辑。 - 关闭SDK自动项管理(仅适合自定义规则多的项目)
如果你需要完全手动管控项目内所有文件的包含规则,可以在项目文件的第一个<PropertyGroup>节点下添加如下配置,彻底关闭SDK自动生成Remove项的行为:
<PropertyGroup> <EnableDefaultContentItems>false</EnableDefaultContentItems> <EnableDefaultRazorGenerateItems>false</EnableDefaultRazorGenerateItems> </PropertyGroup>
注意:开启这个配置后,SDK不会再自动扫描纳入项目文件,你需要手动把所有需要参与编译的razor、静态资源文件显式写进ItemGroup,否则会出现文件不被识别、路由失效的问题。
内容的提问来源于stack exchange,提问作者Darkmatter5
相关产品推荐
相关产品推荐

