缺少的软件包导致NuGet软件包还原失败

5
我们热衷于使用NuGet,不仅用于内部构建的软件包,还用于第三方软件包。我们最近开始在一些构建项目中启用NuGet Package Restore选项,以减少提交到源代码控制的二进制文件数量,但是我们遇到了一个问题。我们看到Visual Studio的启动时间非常长,并且一旦启动(可能需要超过半个小时),随后的构建也同样耗时。在此期间,您可以在进程资源管理器中看到许多子NuGet进程的出现和消失。我们发现,如果packages.config文件中引用的软件包版本在任何配置的软件包源中都不可用(可能是内部软件包的旧版本,有人正在清理我们的本地存储库),那么似乎NuGet和Visual Studio会陷入某种无限(或者至少是长时间运行的)重试循环。如果我们从命令行运行NuGet安装命令,会返回错误信息。
>.nuget\NuGet.exe install project\packages.config -o packages
Unable to find version '1.0.0.1' of package 'my.internal.package'.

但看起来 Visual Studio/NuGet 没有正确地消费它。

  • NuGet 是否在任何地方记录其操作?
  • 我们能否限制 NuGet 恢复重试或超时(也许在 nuget.targets 文件中)?
  • 看起来 NuGet 的语义化版本号未被使用,因为在上述场景中 1.0.0.2 可在仓库中获取,这可以启用吗?

你能分享一下创建nuget进程的命令行吗?你可以从进程资源管理器或任务管理器中获取这些信息。这将更好地了解是什么在产生这些进程。 - allen
2个回答

2
这似乎类似于这个问题:http://nuget.codeplex.com/workitem/2970。我使用的临时解决方法是打开nuget.targets并替换以下内容:
<!-- 我们需要确保在程序集解析之前恢复包 -->
<ResolveReferencesDependsOn Condition="$(RestorePackages) == 'true'">
RestorePackages;
$(ResolveReferencesDependsOn);
</ResolveReferencesDependsOn>

 

使用以下内容替换:

<BuildDependsOn Condition="$( RestorePackages) == 'true'">
RestorePackages;
$(BuildDependsOn);
</BuildDependsOn>

关闭并重新加载VS中的解决方案。这将使构建依赖于还原软件包而不是程序集解析,这似乎可以解决问题。

希望这有所帮助。


0

首先,您的版本控制不符合NuGet建议的格式,即1.2.3。因此,您应该尝试将版本号提升为1.0.1,以查看是否解决了问题。

  • NuGet是否在任何地方记录其操作?

您可以使用命令行"nuget install"中的-verbosity标志获取其他信息。 详细信息也可在输出窗口中找到。从下拉菜单中选择“包管理器”。 要获取更多信息,请使用devenv /log

  • 我们是否可以限制NuGet恢复重试或超时(可能在 nuget.targets文件中?)

我不知道这里有任何方法。

  • 看起来NuGet没有使用语义化版本控制, 因为在我们上面的场景中,存储库中可用的是1.0.0.2,这可以启用吗?

这可以通过在工具->选项->包管理器中勾选“自动检查更新”来实现。请检查您的packages.config是否将版本限制为1.0.0.1


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