C# 项目中发现并解决 NuGet 依赖报错:The package XXX could not be found in XXX。 Run a NuGet package restore to download the package.

C# 项目中解决 NuGet 依赖报错

背景概述
今天用dism+++清理了下电脑,发现vs项目无法运行了,某个项目提示:

The package AngleSharp with version 1.3.0 could not be found in ... Run a NuGet package restore to download the package.

一、问题原因

  • 所谓“上游依赖”,“可传递依赖”,指的就是XX项目中直接引用了某个包A,A包 引用到了AngleSharp包,AngleSharp包 是简洁引用的,A包 就是上游依赖,AngleSharp包 就是可传递依赖。
  • NuGet 会自动拉取“可传递依赖”(Transitive Dependencies)。
  • 清理本地缓存或离线包后,如果上游依赖包A丢失,就会报找不到包的错误,我们就需要找到包A是哪个包。

二、快速定位上游依赖(也可以在项目的 NuGet 管理器中挨个查看哪个包依赖了AngleSharp包)

1. dotnet list package

# 包含传递依赖
dotnet list XXX.csproj package --include-transitive
# 仅列直接依赖
dotnet list XXX.csproj package

对比两份列表,锁定可能引入 AngleSharp 的包。

2. 查看 project.assets.json

# 还原并搜索上下文(找到项目中obj/project.assets.json这个文件并打开)
dotnet restore
# PowerShell
Select-String '"AngleSharp/1.3.0"' -Path obj/project.assets.json -Context 5,2
# Bash
grep -R -n '"AngleSharp/1.3.0"' -C5 obj/project.assets.json

在上下文中,找到类似:

"Masuit.Tools.Abstractions/2025.2.0": {
  "dependencies": { "AngleSharp": "1.3.0", ... }
}

说明 Masuit.Tools.Abstractions 引入了 AngleSharp。

三、解决方案

  1. 在 NuGet 管理器中卸载有问题的上游包(如 Masuit.Tools.Abstractions)。

  2. 重新安装该包,NuGet 会自动恢复所有传递依赖。

  3. 重建项目:

    dotnet build
    

四、进阶提示

  • 如需临时屏蔽传递依赖,可在 .csproj 中配置(不推荐):

    <PackageReference Include="Masuit.Tools.Abstractions" Version="2025.2.0">
      <ExcludeAssets>runtime; build; native; contentfiles; analyzers</ExcludeAssets>
    </PackageReference>
    
  • 保持本地缓存完整,避免意外丢包。

  • VS 的“已安装→传递依赖”标签页可视化查看依赖链。

posted @ 2025-05-15 12:28  吃饺子不沾醋  阅读(118)  评论(0)    收藏  举报