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

如何通过NuGet传递固定功能更新传递包版本?设置属性后未生效

解决NuGet传递固定(Transitive Pinning)功能不生效的问题

传递固定功能是**中央包管理(CPM)**的附加特性,只单独设置CentralPackageTransitivePinningEnabled不会生效,必须配合完整的CPM配置才能实现传递包版本覆盖。以下是正确的配置步骤:

1. 先启用中央包管理

传递固定依赖CPM的基础能力,必须先开启中央包管理。推荐在解决方案根目录创建Directory.Packages.props文件(统一管理所有项目的包版本),添加如下配置:

<Project>
  <PropertyGroup>
    <!-- 核心:启用中央包管理 -->
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
    <!-- 启用传递固定功能 -->
    <CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
  </PropertyGroup>
</Project>

如果是单个项目,也可以直接在.csproj等项目文件中添加这两个属性,但用根目录的Directory.Packages.props更适合多项目解决方案。

2. 声明需要固定的传递包版本

传递固定不会自动帮你升级到最新版,而是强制让传递依赖使用你明确指定的版本。你需要在Directory.Packages.props中添加目标包的版本声明:

<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
    <CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
  </PropertyGroup>
  <ItemGroup>
    <!-- 替换成你要升级的包名和安全版本号 -->
    <PackageVersion Include="VulnerablePackageName" Version="1.2.3" />
  </ItemGroup>
</Project>

3. 清理并恢复NuGet包

配置完成后,执行以下命令确保更改生效:

dotnet clean
dotnet restore

或者在Visual Studio中右键解决方案,依次选择「清理解决方案」→「还原NuGet包」。

常见误区

  • 未启用ManagePackageVersionsCentrally:这是最容易忽略的前提,传递固定完全依赖CPM的版本管理能力。
  • 未指定目标包版本:传递固定需要你明确给出要使用的版本,它不会自动识别并升级到最新安全版。
  • 项目文件存在冲突配置:如果项目文件中显式声明了该传递包的旧版本,会覆盖中央包管理的配置,需要删除项目内的对应包声明。

内容的提问来源于stack exchange,提问作者Bob Tway

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:54:53