NuGet包还原退出代码为-1。

7
我在输出窗口中看到了以下错误信息:

D:\{solutionPath}\.nuget\nuget.targets(76,9): error : 
D:\{solutionPath}\.nuget\nuget.targets(76,9): error : Unhandled Exception: OutOfMemoryException.
D:\{solutionPath}\.nuget\nuget.targets(76,9): error MSB3073: The command ""D:\{solutionPath}\.nuget\nuget.exe" install "D:\{pathToConfigLocation}\packages.config" -source "" -o "D:\{solutionPath}\packages"" exited with code -1.

以上是使用原始的NuGet.targets文件。
D:\{solutionPath}\.nuget\nuget.targets(76,9): error : 
D:\{solutionPath}\.nuget\nuget.targets(76,9): error : Unhandled Exception: OutOfMemoryException.
D:\{solutionPath}\.nuget\nuget.targets(76,9): error MSB3073: The command ""D:\{solutionPath}\.nuget\nuget.exe" install "D:\{pathToConfigLocation}\packages.config" -source "{localPackageDir}" -o "D:\{solutionPath}\packages"" exited with code -1.

我的软件包源是否与NuGet.targets文件一致

在进行构建时,会创建尽可能多的nuget.exe进程以使用所有内存,然后失败并再次尝试。

我已经将该命令通过cmd运行。

"D:\{longPah}\.nuget\nuget.exe" install "D:\{longPah}\packages.config" -source "\\{longPah}\NuGetPackages" -o "D:\{longPah}\packages"

这让我出现了以下错误:
Unhandled Exception: System.IO.FileLoadException: Could not load file or assembl
y 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or
 one of its dependencies. Exception from HRESULT: 0x800705AF
   at Bootstrapper.Program.Main(String[] args)

我机器上安装了.NET 4。如果可能,请帮忙解决。谢谢,David。

编辑

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Company.Common.Library" version="0.1.2" targetFramework="net35" />
</packages>

如您所请求的,这是packages.config。

编辑

我尝试通过Visual Studio命令提示符(以管理员身份运行)运行该命令,但它抛出以下异常:

未处理的异常:OutOfMemoryException。

编辑-可能的修复

我想我已经找到了问题... 它似乎与.nuget文件夹中的nuget.exe有关。

我有几个解决方案,并发现其中一些解决方案有效,浪费了很多时间查看文件权限(被告知那是问题),然后想要在每个解决方案中检查nuget.exe属性。

在有效的解决方案中,我发现:

enter image description here

在无效的解决方案中,我发现:

enter image description here

正如您所见,两者的文件大小差异很大。 所有项目都由团队中的不同人添加,开发人员机器上安装的nuget版本是否会导致问题?

如果是这样的话,有谁知道当您选择为解决方案启用包恢复时,哪个版本的nuget会引起上述问题? 顺便说一下,我在我的机器上安装了最新版本的NuGet。


你可以分享 packages.config 的内容吗? - Alexandre Dion
1个回答

13

两者都会导致错误。较小的文件只是一个外壳程序,它将命令传递给一个实际的版本并将其下载到%LOCALAPPDATA%\NuGet中。它每隔10天检查新版本。

看看这个问题:http://nuget.codeplex.com/workitem/2390(NuGet包还原假定有互联网访问权限) - 可能是18K的壳程序试图将完整的nuget.exe下载到%LOCALAPPDATA%\NuGet文件夹中,但出于某些原因无法下载。

NuGet 2.0发布时,它带有一项选择性的Package Restore同意选项。请参见http://blog.nuget.org/20120619/nuget-2.0-released.htmlhttp://blog.nuget.org/20120518/package-restore-and-consent.html,其中详细介绍了使其正常工作所需完成的任务。

或者,您可以使用NugetEnablePackageRestore包永久接受整个同意协议 - http://nuget.org/packages/NuGetEnablePackageRestore - 请注意,此修复方法将为所有未来用户(包括构建服务器)解决此问题。


谢谢回复,第一个exe确实可以工作,但引导程序却不行。我已经勾选了软件包还原复选框,所以我相信这不是问题所在...不过我可能错了,今天晚些时候或明天我会尝试在另一个项目上使用您的软件包。谢谢。 - David McLean
2
另外请注意,我已经评论了shell尝试下载nuget.exe的完整版本到%LOCALAPPDATA%\NuGet文件夹。您可以检查该文件夹的权限,或者只是查看是否存在nuget.exe文件。如果有,请将其删除并重试。它会将命令传递给该文件。如果某种原因导致该文件被锁定或不存在,可能会导致您看到的问题。 - ferventcoder
这是一个很好的建议,我明天一早就会检查。谢谢。 - David McLean
2
好的,这是一个权限问题,或者至少与 %LOCALAPPDATA%\NuGet 文件夹有关。我将其所有文件都删除了,然后进入 %LOCALAPPDATA% 文件夹并将其设置为非只读(对其子文件夹也是如此),然后尝试运行它,成功了。非常感谢。 - David McLean
今天这个问题终于解决了。我本来可以构建我的解决方案,但是当我以管理员身份运行VS时,出现了Nuget错误。从%LOCALAPPDATA%\NuGet中删除nuget.exe就解决了这个问题。 - Andrew Carmichael

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