消除对NuGet包漏洞的困惑

编程语言 2026-07-11

时不时地,我会在Visual Studio收到一条提示,说我正在使用的一个或多个包已经过时并存在漏洞。不过,我发现解决这个问题的过程让人难以理解。

问题1

我找到的更新某个包的唯一方法是选中直接包含它的所有项目,卸载当前包,然后再安装新版本。然而,这很麻烦,因为卸载该包会把它从列表中移除。

现在我必须去重新找到那个包,确认它是我之前在用的正确版本,记住哪些项目引用了它以便我能选中它们,然后我才能最终安装新版本。有时候为了确保引用的是正确的库要花很多时间,这个过程也很容易把我搞混!

这显然不是预期的流程。我到底哪里做错了?

问题2

我的第二个问题是,其中一个包只有“传递性(transitive)”包。由于没有办法选中直接引用该包的任何一个项目,所以看起来我没有办法卸载它。

在此输入图片描述

解决方案

更新整个解决方案中的NuGet包最简单的方法,是通过Visual Studio的“包管理器控制台”运行一个命令。这也允许你指定是否要获取所有内容的绝对最新版本(例如从v8.x跳到v10.x的包),还是只获取最新的“次要版本”或“补丁版本”。

步骤:

  • 打开Visual Studio的“包管理器控制台”
  • 将版本 A.B.C 升级到版本 LATEST.LATEST.LATEST,执行此命令:Update-Package
  • 将版本 A.B.C 升级到版本 A.LATEST.LATEST,执行此命令:Update-Package -ToHighestMinor
  • 将版本 A.B.C 升级到版本 A.B.LATEST,执行此命令:Update-Package -ToHighestPatch

请注意,如果某个包X 有一个 次要版本更新 会强制另一个包Y 出现 重大版本更新,命令 Update-Package -ToHighestMinor 可能会失败。这意味着包X 的版本控制策略有问题,在你能够自行更新Y 之前,这种更新就不可行。替代方案是尝试 Update-Package -ToHighestPatch

备选方案

要重现:

  • dotnet new classlib
  • dotnet add package MailKit --version 4.15.0

然后要显示漏洞的 dotnet package list 指向的问题依赖项:

warning NU1902: Package 'MimeKit' 4.15.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-g7hc-96xr-gvvx

dotnet package update 解决了它:

Updating MailKit 4.15.0 to 4.15.1.
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章