.NET 9项目中使用required成员的类型构造函数报错排查求助
兄弟,我之前也踩过类似编译器版本不匹配的坑,结合你的情况给你梳理几个排查方向,应该能解决问题:
检查全局SDK版本锁定文件:看看项目根目录或者解决方案根目录有没有
global.json文件,这个文件会强制项目使用指定版本的SDK。如果里面指定的是.NET 8的版本,哪怕你本地装了.NET 9,项目也会用旧SDK编译,这时候就会触发这个required成员构造函数的报错。如果有这个文件,要么删除它,要么把里面的SDK版本改成你本地的9.0.203。确认Visual Studio的.NET 9组件是否完整:虽然你装了VS2022 17.14.6,但说不定漏装了.NET 9的工作负载或编译器组件。打开VS安装器,切换到“修改”→“单个组件”,搜索“.NET 9.0 SDK”和“C# 12编译器”相关组件,确保都勾选安装了,然后重启VS再试。
手动指定项目的语言版本:虽然项目默认应该用C# 12,但有时候默认配置会因为某些原因失效。直接在你的.NET 9项目的
.csproj文件里添加一行:<LangVersion>12</LangVersion>,或者更激进一点用<LangVersion>latest</LangVersion>,强制编译器使用最新支持的语言版本。清理项目编译缓存:旧的bin/obj文件夹里的残留编译文件经常会搞出奇怪的版本冲突问题。先关闭VS,删除项目目录下的
bin和obj文件夹,然后重新打开VS,右键解决方案选择“清理解决方案”,再“重新生成解决方案”,确保用全新的环境编译。检查NuGet包兼容性:看看项目里引用的NuGet包有没有针对.NET 8的旧版本,尤其是那些和代码生成、编译器相关的包(比如Microsoft.CodeAnalysis系列)。把所有NuGet包更新到支持.NET 9的最新版本,避免版本不兼容导致的编译器行为异常。
验证项目目录下的SDK版本:打开命令提示符,cd到你的.NET 9项目目录下,运行
dotnet --version,看看输出的是不是9.0.203。如果显示的是8.0.410,说明全局SDK的优先级有问题,这时候用global.json指定项目使用9.0 SDK就可以解决。
内容来源于stack exchange

