构建时NuGet包恢复速度极慢(每个项目约10秒)

时间:2014-01-20 14:09:16

标签: c# visual-studio-2012 msbuild nuget nuget-package-restore

我在使用12个项目的解决方案中使用非常慢速构建时遇到问题,其中7个项目启用了NuGet Package Restore。诊断输出通常显示如下:

    [...]
    9 ms  ResolveProjectReferences                   1 calls
   18 ms  _CleanGetCurrentAndPriorFileWrites         1 calls
   32 ms  CoreClean                                  1 calls
   56 ms  ResolveAssemblyReferences                  1 calls
   77 ms  _CopyFilesMarkedCopyLocal                  1 calls
  400 ms  CoreCompile                                1 calls
 9082 ms  RestorePackages                            1 calls

这是典型的;每个项目的RestorePackages通常需要9-10秒,而对于7个项目,这为我的构建时间增加了70秒。构建相同解决方案的同事都没有这个问题。我已禁用所有扩展,Visual Studio(2012)是最新的。

我有filed an issue on CodePlex,但我也想问这个知识渊博的社区,以防有一个quickfix,并寻求帮助解决这个问题。

编辑:我完全删除了NuGet - RestorePackages目标仍在执行,但仍需要10秒。我需要在csproj文件中手动设置 RestorePackages = false 以使其消失。

编辑2:如果我在NuGet.targets中注释掉RestorePackages任务中的内容,问题就会消失。像这样:

<Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites">
    <!--<Exec Command="$(RestoreCommand)"
          Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" />

    <Exec Command="$(RestoreCommand)"
          LogStandardErrorAsError="true"
          Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" />-->
</Target>

如果我删除CheckPrerequisites目标,则没有任何区别。

编辑:我安装了Windows 8.1,不再出现问题。

2 个答案:

答案 0 :(得分:0)

我认为这不是构建问题。尝试手动执行从命令行传入的NuGet.exe,您可能会看到它需要相同的时间。

过去,如果我的项目中有“复制到输出目录”设置为“始终复制”的某些资源文件(图像等),我一直有这个NUGet包下载内容的问题。 。如果您有此,请尝试将其更改为“如果更新则复制”。

答案 1 :(得分:0)

有时它会像昨天一样痛苦地缓慢 您可以查看服务here的状态。