构建时的NuGet包恢复非常缓慢(每个项目约10秒钟)

5

我在一个包含12个项目的解决方案中遇到了构建非常慢的问题,其中7个项目启用了NuGet包还原。诊断输出通常会显示如下内容:

    [...]
    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)是最新的。
我已经在CodePlex上提交了一个问题,但我也想在这个知识渊博的社区中询问是否有快速修复方法,并寻求故障排除的帮助。
编辑:我完全删除了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,问题不再出现。


连接软件包服务器的超时默认为10秒。您可能在nuget.config中有一个无法连接的服务器。由于本地磁盘上软件包缓存的存在,还原可能仍然有效。 - Owen Johnson
2个回答

2
有时可能会非常缓慢,比如昨天。
您可以在这里检查服务的状态。

1
在2022年,往往仍然很慢。 - Prof. Falken

0

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

过去,如果我的项目中有一些资源文件(图像等),其中“复制到输出目录”设置为“始终复制”,那么我就会遇到NUGet包下载内容的问题。如果你也有这个问题,请尝试将其更改为“仅在更新时复制”。


非常感谢,我会调查这个问题。这不会影响我的同事们吗? - andrerav
自动恢复软件包的设置实际上是在您的Visual Studio设置中设置的。请检查您是否与同事具有相同的设置。顺便说一下,检查一下您的软件包缓存和软件包源设置也会很有用。 - Hamid Shahid
很遗憾,这没有产生任何影响,问题仍然存在。我现在只能注释掉 NuGet.targets 中的 RestorePackages 目标 :( - andrerav

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