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

VS 2022与.NET 7.0中传递性NuGet包更新问题咨询

针对传递性NuGet包管理问题的解决方案

问题1:无法查看传递性包的过时状态

你可以通过两种方式解决:

  • 在Visual Studio的NuGet包管理器中,点击右上角的设置图标,进入“常规”设置面板,勾选**“显示传递性包的更新”**,过时的传递性包会和直接依赖包一同出现在“更新”标签页中。
  • 使用.NET CLI命令行工具,执行dotnet list package --outdated --include-transitive,该命令会列出所有直接依赖和传递性依赖的过时包,包含版本差异及安全漏洞提示(若存在)。

问题2:更新传递性包后变为直接依赖,导致自动卸载失效

直接在NuGet管理器中更新传递性包时,NuGet会自动将该包写入项目文件(.csproj)的<PackageReference>节点,使其成为直接依赖,自然不会随原依赖包卸载。正确做法是不直接更新传递性包,而是通过以下方式强制依赖包使用新版本:

  • 修改项目文件的版本约束:在.csproj中为目标传递性包添加<PackageReference>,同时设置IncludeAssets="none"和PrivateAssets="all",既不会将其转为直接依赖,又能强制所有依赖它的包使用指定版本。示例:
    <PackageReference Include="SharpZipLib" Version="1.3.3">
      <IncludeAssets>none</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    
  • 使用中央包管理(Central Package Management):在解决方案根目录创建Directory.Packages.props文件,统一管控所有包的版本,包括传递性包的版本覆盖。示例:
    <Project>
      <PropertyGroup>
        <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
      </PropertyGroup>
      <ItemGroup>
        <PackageVersion Include="SharpZipLib" Version="1.3.3" />
      </ItemGroup>
    </Project>
    
    配置后,所有依赖SharpZipLib的包会自动使用指定版本,且不会将其转为直接依赖,卸载原依赖包时,传递性包会被自动清理。

额外注意事项

  • 若已误将传递性包转为直接依赖,可手动编辑.csproj文件,删除对应的<PackageReference>节点,恢复其传递性依赖状态后,再通过上述方式指定版本。
  • 对于存在安全漏洞的传递性包,优先检查原依赖包是否有更新版本——原依赖包的新版本可能已升级传递性包的依赖版本,直接更新原依赖包是更稳妥的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:22:42