You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

集中包管理(Central Package Management)对传递包工作异常,出现System.Text.Json版本降级构建报错

集中包管理(Central Package Management)对传递包工作异常,出现System.Text.Json版本降级构建报错

嗨,我来帮你拆解下这个问题,你遇到的情况其实是集中包管理和NuGet依赖版本解析逻辑之间的小冲突,咱们一步步理清楚:

问题根源分析

从你给出的错误信息来看,核心矛盾点是:你的项目明明指定了.NET 8兼容的包版本,但NuGet却尝试拉取.NET 9版本的Microsoft.Extensions.Hosting(9.0.0),进而它的传递依赖Microsoft.Extensions.Configuration.Json 9.0.0要求System.Text.Json >=9.0.0,和你中心配置的8.0.6产生了版本冲突,触发了“降级警告”(而你把警告设为错误,所以构建失败)。

为什么会出现这个情况?主要是因为你当前的CentralPackageTransitivePinningEnabled=false配置,允许NuGet自动升级传递依赖到更高版本——哪怕你没直接引用.NET 9的包,只要某个依赖的版本范围允许(比如>=8.0.0),NuGet就可能拉取最新的9.0.0版本。

解决方案推荐

方案一:强制锁定所有相关传递依赖的版本(最彻底)

既然你要坚持用.NET 8,咱们直接把所有涉及的传递依赖也纳入集中管理,强制锁定到.NET 8兼容版本:

  1. 打开你的Directory.Packages.props,添加Microsoft.Extensions.Configuration.Json的版本锁定(它是Microsoft.Extensions.Hosting的核心依赖,版本要和Hosting匹配):
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="8.0.19" />
<PackageVersion Include="System.Text.Json" Version="8.0.6" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="8.0.19" />
  1. 把CentralPackageTransitivePinningEnabled设为true:
<PropertyGroup>
  <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
  <CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
</PropertyGroup>

这样NuGet会严格遵守你中心配置的版本,不会擅自升级到9.0.0的包,从根源解决冲突。

方案二:检查项目中的残留版本引用

虽然你启用了集中包管理,但如果项目里的PackageReference自己带了Version属性,会直接覆盖中心配置。你可以检查所有项目的.csproj文件,确保没有类似这样的代码:

<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.0" />

另外,也可以在项目目录下执行命令,查看所有依赖的实际版本,定位哪里引入了9.0.0的包:

dotnet list package --include-transitive

方案三:临时绕过警告(不推荐,仅应急)

如果你需要临时构建通过,可以把这个降级警告排除在错误之外,在项目的.csproj的PropertyGroup里添加:

<PropertyGroup>
  <NoWarn>$(NoWarn);NU1605</NoWarn>
</PropertyGroup>

不过这只是治标,还是建议优先用前两个方案从根源解决。

补充说明:为什么开关设为true时只有部分项目报错?

当CentralPackageTransitivePinningEnabled=true时,NuGet会强制所有传递依赖使用中心指定的版本:

  • 引用了Microsoft.Extensions.Hosting的项目:中心配置的8.0.19会被强制使用,它的传递依赖(比如Configuration.Json)也会用8.0.19,对应的System.Text.Json依赖版本和你中心的8.0.6匹配,所以不会报错。
  • 没引用Hosting的项目:可能有其他传递依赖尝试拉取9.0.0的System.Text.Json,但被中心配置强制降级到8.0.6,所以触发了错误。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 06:52:57