消除对NuGet包漏洞的困惑
时不时地,我会在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 classlibdotnet 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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。