如何修复Razor组件存在多个作用域CSS文件的构建错误
这个错误我之前也踩过坑——明明自己只配置了一个CSS文件,编译器却死咬着说有多个关联文件,大概率是复制文件时留下的隐藏问题,咱们一步步排查解决:
严格检查文件命名与关联
确保你的组件RandomizeNamesAdvanced.razor对应的CSS文件命名完全是RandomizeNamesAdvanced.razor.css,不能有拼写错误、大小写偏差(Windows系统文件名不区分大小写,但编译器可能认死理)。另外仔细看看文件夹里有没有重名的衍生文件,比如复制后自动加了-Copy1后缀的RandomizeNamesAdvanced.razor-Copy1.css,这类容易被忽略的文件也会触发错误。检查项目文件中的重复引用
有时候复制文件后,项目的.csproj文件里会残留重复的文件引用。右键你的项目→选择「编辑项目文件」,搜索RandomizeNamesAdvanced相关的条目,看看是不是存在多个<Content Include="Pages\Randomizer\RandomizeNamesAdvanced.razor.css" />这类行,把多余的删掉,保存后重新加载项目。清理编译缓存与隐藏文件
编译缓存经常会搞出这种乌龙:- 先关闭Visual Studio(或者你用的IDE);
- 删除项目目录下的
bin和obj文件夹; - 如果有
.vs文件夹(Visual Studio的缓存目录)也一并删掉; - 重新打开项目,先执行「清理解决方案」,再执行「重新生成解决方案」。
另外还要留意有没有临时文件,比如后缀带~的RandomizeNamesAdvanced.razor.css~,这类隐藏文件也要删掉。
再次验证Build Action设置
虽然你说已经把CSS文件的Build Action设为Content,但再确认一次:右键CSS文件→属性,确保Build Action确实是Content,没有被误设成其他选项(比如Embedded Resource),同时也要检查有没有其他和组件关联的CSS文件被错误设置成了Content。排查路径大小写问题
如果你的项目用了Git或者跨平台开发,路径大小写不一致也可能导致编译器识别成不同文件。比如组件路径是Pages\Randomizer\RandomizeNamesAdvanced.razor,但CSS文件路径是pages\randomizer\RandomizeNamesAdvanced.razor.css,Windows下显示一样,但编译器会认为是两个不同的文件,统一成一致的大小写即可。
按上面的步骤排查下来,基本就能解决这个问题了,我当时就是项目文件里多了一条重复的引用,删掉就好了。
内容的提问来源于stack exchange,提问作者SZT

