NuGet还原失败,无法识别未安装的软件包。

14
我们的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认为这些包已经安装了?是解决方案文件还是项目文件中的某些内容?
3个回答

2

我遇到了同样的问题。

当我运行nuget restore sln时:

> 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 的一个 bug。


2

我也遇到了同样的问题,但是即使删除packages目录,仍然会出现packages.config中列出的所有包都已安装的错误提示。

原来是packages.config文件无效了。或者说,有点问题:

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

我不知道是哪个工具插入了XML命名空间,但这就是NuGet不尝试安装任何包的原因。
将其改回
<packages>
  ...
</packages>

对我来说解决了问题。


非常奇怪的行为。经过数小时的研究,这个答案对我起了作用。我本来期望在这种情况下会有一个无效 XML 的警告。谢谢! - Sebastian

1
NuGet会在还原时检查解决方案的packages目录。 它会检查该目录是否包含NuGet包的.nupkg和清单文件,如果是则认为NuGet包已经在本地安装。 该消息表明包已经在解决方案包目录中可用。可能是由于您的构建服务器未在检出源代码时清除现有目录,并且每次都将源代码检出到相同的目录中。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接