为何MVC Core 2项目突然所有Razor视图出现编译异常?
这个问题我在维护ASP.NET Core 2项目时遇到过好几次,大概率是你修改Explorer.cshtml时不小心搞砸了Razor预处理指令的写法,或者引入了无效的指令。给你几个实用的排查和解决步骤:
检查视图中的Razor预处理指令
打开Explorer.cshtml,仔细排查有没有拼写错误、格式不对的预处理指令。Razor支持的标准指令是#if、#else、#endif、#define这类,要是你不小心写成#iff、#invalid这种未被识别的指令,或者把指令和@符号的配合搞混(比如写成#@if),就会触发这个编译错误。另外还要注意指令是否完整闭合,比如写了#if就必须有对应的#endif。清理项目编译缓存
ASP.NET Core有时候会残留旧的编译缓存,导致修改后的代码没被正确编译。按这个流程操作:- 右键项目,选择清理
- 删除项目根目录下的
bin和obj文件夹 - 重启你的开发工具(Visual Studio或其他),然后重新生成项目
排查视图中的格式或特殊字符问题
有时候不小心在指令附近添加了多余的空格、特殊字符,或者注释格式错误,也会让编译器误以为是无效的预处理指令。比如在指令行末尾加了奇怪的符号,或者用了中文的标点符号,都可能引发问题。确认项目的Razor编译配置
打开项目的.csproj文件,检查有没有MvcRazorCompileOnPublish、RazorCompileOnBuild这类配置项。如果之前运行正常,这个出错的概率不高,但可以确认这些配置的取值是否合理(比如是true还是false),有没有被误修改。
要是按上面的步骤还是没解决,建议你把Explorer.cshtml最近修改的代码片段贴出来,这样能更精准定位问题。
内容的提问来源于stack exchange,提问作者ProfK

