【问题标题】:NuGet not updating project referencesNuGet 不更新项目引用
【发布时间】:2015-12-11 06:20:24
【问题描述】:

我最近将我的所有 Visual Studio 2013 项目迁移到 Visual Studio 2015,并按照 Nuget 在此 article 中记录的步骤确保自动包还原仍然有效,简而言之

  • 我从源代码管理和磁盘中删除了 Nuget.exe 和 Nuget.target 文件
  • 我更新了所有项目文件并删除了与 Nuget 相关的部分

我在更新 Nuget 包时遇到问题,它没有更新项目引用以指向最新的 dll 版本。我可以看到虽然安装了最新的软件包。这个问题也和具体的包无关。

有没有其他人遇到过这样的问题?

【问题讨论】:

  • Update-Package -reinstall 重新安装包,但安装包具有的所有依赖项的最新版本。为冲突做准备..;)

标签: nuget


【解决方案1】:

NuGet 包还原不会修改项目文件。它只是将 NuGet 包下载并解压缩到包目录。

如果您尝试编辑 packages.config 文件然后更新项目,则必须使用包管理器控制台并运行:

Update-Package -reinstall

这将再次卸载并安装软件包并更新项目的引用。

【讨论】:

  • 我在恢复包后遇到问题,我正在将包更新到新版本。
  • 好的。从您的问题来看,问题并不是很明显,问题是直接对程序集进行引用而不使用 NuGet。
  • 是的,也是经过适当调查才发现的。
  • 仔细检查您的构建输出日志,因为当我的项目文件引用更新后路径不正确的 MSbuild 目标文件时,我遇到了类似的问题。并且在恢复包之前构建失败。
  • 还有一点需要注意:如果您通过 UI 添加一个 nugget 包(右键单击项目 -> 管理包),它将为您添加参考。如果手动编辑 packages.config,则需要运行 Update-Package -reinstall。谢谢马特!
【解决方案2】:

我们意识到我们的一些初级开发人员只在解决方案中安装了 ONE 项目所需的 Nuget 包,然后他们通过浏览到磁盘上 dll 的物理位置来添加对所有其他项目所需 dll 的引用。这显然导致了问题,因为解决方案中只有一个项目在其 packages.config 文件中包含 Nuget 包的条目,而解决方案中的其余项目不包含任何条目。

当使用Update-Package 命令更新所有包时,只有包含其 packages.config 文件中条目的 ONE 项目被更新为正确的项目引用。

尽管这不是 Nuget 错误,而是由于缺乏经验引起的问题,但我还是在 Nuget 上记录了issue,看看他们是否可以改进软件以防止此类问题。

【讨论】:

    【解决方案3】:

    我遇到了Newtonsoft.Json 的 NuGet 包问题,如下所示:

    我尝试了所有可能的解决方案,但以下提到的都没有奏效:

    • 清洗液
    • 重建解决方案
    • 清除 NuGet 包缓存

    最后我意识到这与我的 C# 项目所针对的 .NET Framework 版本有关。似乎有些不匹配。当我将项目的 .NET Framework 版本升级到最新版本时,Newtonsoft.Json 包依赖项及其引用立即生效。

    【讨论】:

    • 是的,事实证明,如果项目的框架版本低于包中的版本,则不会添加引用。
    【解决方案4】:

    所以我最近也遇到了一个非常相似的问题,不幸的是卸载和重新安装不起作用。希望这对其他人有帮助,因为这非常令人沮丧。

    步骤:

    1. 转到或启动快速启动功能。
    2. 类型包管理器
    3. 选择“工具->Nuget PackageManager->包管理器设置”
    4. 在弹出的选项窗口中。点击“清除所有 Nuget 缓存”
    5. 右键单击解决方案并选择恢复 Nuget 包。

    希望这会有所帮助。

    【讨论】:

    • 如果您发现难以在 IDE 中直观地跟踪快速启动功能,则只需按 Ctrl+ Q 组合键作为快捷键。
    • Clear All Nuget Cache(s) 选项已从 Visual Studio(VS) 2015 中删除,该选项在 VS 2017 中重新出现。您可以从命令行here 查看如何操作,以防您在您的系统中使用 VS 2015开发环境。
    【解决方案5】:

    我刚刚注意到的事情,我不确定这是否会帮助您或其他任何阅读本文的人,但这个问题确实让我的大脑崩溃了。问题是我正在安装我自己在 Windows 上使用 NuGet 包资源管理器创建的包。

    事实证明,我相信在更新 NuGet 包资源管理器后,它不再将我包含的 DLL 放入 lib 文件夹。一旦我开始手动将lib 文件夹添加回包资源管理器中的包中,然后上传到 NuGet 并在使用项目中重新安装,引用将再次开始出现。

    我不确定是什么导致了这种行为——这可能是我自己的错,但我现在才真正明白这一点——因此不得不回去重新做一大堆我的 NuGet 包优点在过去的一个月里已经完成了。哎哟。

    希望这至少可以减轻一些人的痛苦。

    【讨论】:

      【解决方案6】:

      以上都不适合我。

      起作用的是直接编辑项目文件并删除现有参考。当我重新加载项目时,该包随后在引用中显示为 Nuget 包。

      【讨论】:

        【解决方案7】:

        我碰巧遇到了同样的问题。我尝试了所有可能的解决方案,但找到了解决方案 - 只需在文本编辑器中打开 .proj 文件并检查包 VersionHintPathReference 标记中。有时会出现不匹配的情况,然后 Visual Studio 会识别出来。我希望每个人都可以节省很多时间。这是一个可供参考的示例

        <Reference Include="nunit.framework, Version=3.4.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb">
              <HintPath>..\packages\NUnit.3.4.1\lib\net45\nunit.framework.dll</HintPath>
        </Reference>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-17
          • 1970-01-01
          • 1970-01-01
          • 2017-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-21
          相关资源
          最近更新 更多