C#8 .NET Core 3.1项目安装VS2022预览版后.g.cs文件报C#9语法错误
根因说明
该问题由VS 2022预览版自带的高版本.NET SDK的兼容问题导致:高版本SDK更新了Razor视图预编译的代码生成规则,默认会输出适配C# 9及以上版本的语法,哪怕项目目标框架是.NET Core 3.1(默认对应C# 8.0),也会在自动生成的_layout.cshtml.g.cs这类文件中出现new()目标类型推断对象创建语法,最终触发语言版本不兼容报错。
解决方案
- 方案1:强制指定Razor语法版本
在项目.csproj文件的PropertyGroup节点下添加以下配置,强制Razor编译器使用匹配.NET Core 3.1的规则生成代码:
<RazorLangVersion>3.0</RazorLangVersion> <LangVersion>8.0</LangVersion>
配置完成后删除项目的obj、bin目录,重新构建即可解决报错。
- 方案2:固定项目使用.NET Core 3.1 SDK
在项目根目录新建global.json文件,强制构建流程调用.NET Core 3.1版本的SDK,避免VS 2022的高版本SDK介入Razor代码生成逻辑:
{ "sdk": { "version": "3.1.426", "rollForward": "latestMinor" } }
配置中的版本号可替换为你本地已安装的任意3.1系列SDK版本号。
- 方案3:临时关闭本地构建的Razor预编译
如果仅需要本地快速调试规避问题,可在.csproj中添加以下配置,本地构建时不预生成Razor视图的.g.cs文件,发布阶段仍保留预编译逻辑不影响线上性能:
<RazorCompileOnBuild>false</RazorCompileOnBuild> <RazorCompileOnPublish>true</RazorCompileOnPublish>
内容的提问来源于stack exchange,提问作者Kapoue
相关产品推荐
相关产品推荐

