NuGet 还原无法看到未安装包

Posted

技术标签:

【中文标题】NuGet 还原无法看到未安装包【英文标题】:NuGet Restore Failing to See that Packages are not Installed 【发布时间】:2015-04-16 20:08:32 【问题描述】:

我们的 CI 服务器在尝试构建项目时无法恢复我们的 NuGet 包。它认为它们已经安装。以下是日志:

build 16-Apr-2015 12:56:38 C:\build-dir\IOP-IOL-JOB1>nuget restore IOHandlerLibrary.sln -NoCache build 16-Apr-2015 12:56:39 All packages listed in packages.config are already installed.

是什么导致 NuGet 认为软件包已安装?是在解决方案中还是在项目文件中?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。

当我为 sln 运行 nuget restore 时:

> nuget restore MySolution.sln
MSBuild auto-detection: using msbuild version '14.0' from 'C:\Program Files 
(x86)\MSBuild\14.0\bin'.
All packages listed in packages.config are already installed.

当我为解决方案中的每个项目单独运行恢复命令时:

> nuget restore MySolution.Common\packages.config -PackagesDirectory .\packages
Restoring NuGet package Microsoft.Azure.KeyVault.WebKey.3.0.0.
Restoring NuGet package Microsoft.Rest.ClientRuntime.2.3.13.
Restoring NuGet package Microsoft.Azure.KeyVault.3.0.0.
Restoring NuGet package Microsoft.Rest.ClientRuntime.Azure.3.3.15.
Restoring NuGet package NLog.4.5.9.
Restoring NuGet package Autofac.4.8.1.
Restoring NuGet package Microsoft.WindowsAzure.ConfigurationManager.3.2.3.
Restoring NuGet package System.IO.4.3.0.
....

所有引用都返回了,并且解决方案在此之后正确构建。 看起来像一个 Nuget 错误。

【讨论】:

【参考方案2】:

我也有同样的问题,但对我来说,即使删除 packages 目录也会导致 All packages listed in packages.config are already installed.

原来 packages.config 文件无效。嗯,有点:

<packages xmlns="urn:packages">
  ...
</packages>

我不知道是哪个工具插入了 XML 命名空间,但这就是为什么 nuget 没有尝试安装 any 包的原因。

改回

<packages>
  ...
</packages>

帮我解决了。

【讨论】:

非常奇怪的行为。经过数小时的研究,这个答案对我有用。在这种情况下,我会期待有关无效 XML 的警告。谢谢!【参考方案3】:

NuGet 将在还原时检查解决方案的包目录。

它检查此包目录是否包含 NuGet 包的 .nupkg 和清单文件,如果是,则认为 NuGet 包已在本地安装。

该消息表明解决方案包目录中的包已经可用。可能是因为您的构建服务器在检出源代码时没有清理现有目录,并且每次都将源代码检出到同一目录。

【讨论】:

我们有完全相同的问题,但是 TFS 在获取源文件开始构建之前删除了所有文件夹,没有签入任何包文件夹。还有其他想法吗? 答案只是解释问题,但解决方案是什么?为什么它被标记为答案?? 解决方法是从包目录中删除包文件夹及其内容,然后重试。 @bcr 的答案是这里的真正答案 - 此外,Visual Studio IDE 在这种情况下经常表现出违反直觉的行为:智能感知将显示数百个缺少依赖项的错误,但如果你真的尝试build,即使“错误”窗格另有说明,输出也会成功

以上是关于NuGet 还原无法看到未安装包的主要内容,如果未能解决你的问题,请参考以下文章

手动删除引用nuget如何还原

NuGet 包还原 + NuGet 源设置

Team City 自定义 NuGet 包还原未发生

VS一直停留在“正在还原nuget程序包”

从 TFS 读取时未安装 NuGet 包

Nuget表示缺少软件包,Package Manager Restore表示已安装所有软件包