解决Asp.NET Core项目构建报错NETSDK1061的技术咨询
这个错误的核心是项目还原(restore)阶段使用的.NET Core App版本和后续构建(build)阶段使用的版本不一致——你的项目还原时用了2.2.4,但构建时会 fallback 到2.2.1,通常和RuntimeIdentifier的设置差异或者TargetLatestRuntimePatch属性有关。结合你的项目配置,给你几个可行的修复方案:
方案1:统一还原与构建的 RuntimeIdentifier 设置
如果你的构建命令(比如CI脚本里)指定了--runtime参数(例如dotnet build --runtime win-x64),那必须在还原阶段也加上完全相同的参数:
dotnet restore --runtime win-x64 dotnet build --runtime win-x64
这样还原和构建会使用完全一致的运行时版本,避免版本不匹配。
方案2:同步 NuGet 包与运行时补丁版本
你的项目里引用了Microsoft.AspNetCore.All 2.2.0,同时开启了<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>——这个属性会让还原阶段自动拉取2.2系列最新的运行时补丁(比如2.2.4),但构建环境可能没有对应版本的SDK。你可以:
- 将
Microsoft.AspNetCore.All的版本升级到2.2系列的最新补丁版本(比如2.2.8),确保包版本和运行时版本匹配; - 同时确认构建环境安装了对应的.NET Core 2.2 SDK补丁版本(可以通过
dotnet --info查看已安装的SDK)。
修改后的PackageReference如下:
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.2.8" />
方案3:移除 TargetLatestRuntimePatch 属性
如果你不需要自动获取最新的运行时补丁,可以直接删掉项目里的<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>配置。这样还原和构建阶段都会使用与Microsoft.AspNetCore.All包版本对应的运行时版本,从根源上避免版本不匹配的问题。
方案4:在CI流程中显式同步还原与构建步骤
如果是CI环境(比如Azure DevOps、GitHub Actions)出现的问题,确保构建脚本中先执行dotnet restore,再执行dotnet build,且两者没有额外的参数差异。不要跳过还原步骤直接构建,也不要给其中某一步添加单独的RuntimeIdentifier或其他版本相关参数。
内容的提问来源于stack exchange,提问作者mcintyre321

