首页 > 解决方案 > 还原 VS 2019 16.5.0 后找不到 Nuget 包

问题描述

我整个早上都在与 nuget 作斗争,试图从 UI 和命令行中获得一个构建的解决方案。这是最新的问题,我还没有取得任何进展:

我尝试过的事情

我错过了什么?这不应该那么难..

更新:该解决方案由 14 个项目组成:9 个 C# 类库、2 个 c# 应用程序、1 个报告服务项目和 2 个 WiX 安装程序项目。所有 C# 项目都针对 Net472,而不是 Core。解决方案结构的关键部分似乎是:

在构建期间,由于缺少对 Newtonsoft.Json 的引用,项目 B 无法编译。项目 A 和所有其他 nuget 包作为参考提供给编译器。同样,实际上所有 nuget 包都已恢复 - 项目 A 找到 Newtonsoft.Json,项目 B 没有。

在详细的 msbuild 日志输出中,这是在项目 10(上面的项目 B)的构建中唯一提到 Newtonsoft.Json:

10>  Dependency "Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed".
10>      Resolved file path is "...ProjectA\bin\Release\Newtonsoft.Json.dll".
10>      Reference found at search path location "...ProjectA\bin\Release".
10>          For SearchPath "...ProjectA\bin\Release".
10>          Considered "...ProjectA\bin\Release\Newtonsoft.Json.winmd", but it didn't exist.
10>      Required by "...ProjectA\bin\Release\ProjectA.dll".
10>      Required by "C:\...ProjectA2\bin\Release\ProjectA2.dll".
10>      Found related file "...ProjectA\bin\Release\Newtonsoft.Json.xml".
10>      The ImageRuntimeVersion for this reference is "v4.0.30319".

(文件夹和项目名称已被隐藏)

标签: c#nugetvisual-studio-2019

解决方案


这里发生了几件事,终于找到了一个可行的解决方案。为什么这在 IDE 中内置是任何人的猜测 - 它添加了一些额外的秘密酱以使事情正常工作(不仅仅是自动 nuget 恢复)。

  • 我尝试将所有项目更改为使用 PackageRef 而不是 packages.config。这导致 nuget restore 失败并出现我没有尝试诊断的模糊 msbuild 错误。
  • 我注意到在 .csproj 文件中使用普通 Reference 元素引用了一些 nuget 包,但其中一些没有(特别是“项目 B”中的 Newtonsoft.Json - 以及由于 B 而我没有注意到的其他一些包)失败)。

要纠正这种情况:

  1. 删除对 PackageRef 元素的所有使用 - 在所有项目中改回 packages.config
  2. 确保在 .csproj 文件中引用了每个 nuget 提供的 DLL。您必须通过手动编辑 csproj 文件来执行此操作 - IDE 不会让您添加缺少的引用。

我假设这是一种临时情况,从长远来看,解决方案将是在任何地方使用 PackageReference。


推荐阅读