76

可能在我构建解决方案的 25% 到 50% 的时间里,我看到了这个:

"您请求的操作完成所需的时间比预期的要长。操作完成后,此对话框将关闭。 "

我以无法描述的方式讨厌这个窗口。它永远不会解决,取消按钮永远不会启用,补救它的唯一方法是终止 devenv 进程并再次加载我的整个解决方案,完全清楚我没有修复任何东西,我同样有可能看到当我尝试构建时也是如此。

我的解决方案总共大约有 60 个项目,其中大部分是 C# 类库,Web 应用程序、Web 服务和控制台应用程序各有一些。但是,即使在构建代码库的一部分且大部分(50)项目已卸载时,问题仍然存在。

我的问题是输出窗口在冻结时没有告诉我任何信息,而且我不知道如何确定这种锁定的原因。如果我猜测,我会假设这是文件系统中的死锁或其他什么,但我不知道如何去证明这一点——更不用说如何防止它了。

我可以做些什么来诊断并从我的解决方案中消除它,这样我就再也看不到它了?一般来说,我如何诊断构建过程中出现的问题?

4

15 回答 15

66

有类似的问题,VS 会挂起 45 秒左右,然后构建 4 秒并完成。45 秒的挂起不会对 GUI 产生任何输出,VS 会挂起。

使用 ProcMon,当我构建这个项目时,我可以通过 devenv.exe 在 /packages/ 文件夹上看到超过 300 万个文件操作(并且会在之后继续一段时间)!!构建的第一步您可以看到它正在检查每个包以查看它是否需要进行包还原(它没有)。

由于我倾向于将所有事情都归咎于 NuGet,因此我在Visual Studio -> Options -> Nuget Package Manager -> General下禁用了 NuGet Package Restore “允许 NuGet 下载丢失的包”复选框。 令我高兴的是,构建速度非常快。总共5秒!

事实证明,我们在启用构建时启用了包还原(我认为现在在 VS 中默认启用)并且我们还将包签入源代码控制。似乎这会导致 TFS 以某种方式颠簸...检查恢复包必须触发 TFS 进行一些源代码控制操作检查。

仅供参考,这是 VS2013 更新 4 - Nuget 版本:2.8.50926.663,在 NumberOfProjects = 38 的 sln 上,但我可以重新创建这个挂起,只需构建一个具有 2 个依赖项的 csproj。

更新:

SccNumberOfProjects = 53 的 Sln 上的本地主机“全部重建”花费 7:05,视觉工作室冻结/无响应 2 分钟

  • 在没有冻结的 2 核 i5 上降至 4:14
  • 在 4 核 i7 上降至 2:44

另外:这是在具有各种文件监视安全工具的机器上,可能不会为整个过程增加任何速度......并且可能是罪魁祸首。

2021 年更新: 如果您正在寻找一种范式转变,新的SDK 样式 csproj 格式(请参阅迁移工具)+ nuget PackageReference使更新几乎是即时的(对于上述场景中的相同项目, < 20 秒) - 强烈建议您升级任何旧项目. ** 已知不兼容 - 网站包引用不支持通过 nuget 的静态文件引用(结帐 LibMan)

于 2015-06-09T18:12:45.680 回答
45

当 MSBuild 在诊断开关打开的情况下运行时,我已经在大型项目上看到过这种情况。在 Visual Studio 中,转到 Tools / Options / Projects & Solutions / Build And Run,然后检查 MSBuild project build output verbosity value。如果未设置为最小,请尝试设置为最小并查看您的构建是否能够完成。

于 2014-04-11T17:00:38.177 回答
10

在我的情况下,将“并行项目构建的最大数量”设置为 1 有点帮助(即从干净状态构建项目会导致 1 分钟冻结,然后是正常构建,并且每个后续构建都可以正常工作)。

可以在 中设置上述设置Tool -> Options -> Projects and Solutions -> Build and Run

于 2016-09-07T19:25:37.170 回答
8

似乎以管理员身份运行 Visual Studio 为我解决了这个问题!(要始终以管理员身份运行程序,请参阅默认情况下如何以管理员身份运行 Visual Studio

于 2016-10-20T10:40:33.077 回答
6

我发现 Visual Studio 在构建更大的项目上挂了很多。原来是 ReSharper。在我关闭它之后:工具 -> 选项 -> ReSharper -> 现在暂停,一切都很好,没有问题(即使在非常大的解决方案上,100 多个项目)

于 2017-09-20T10:10:35.503 回答
5

当我尝试我的方法时,我没有尝试任何上述解决方案 - 一切都很好。

我的步骤如下:

  1. 关闭 VS
  2. 删除 .vs 文件夹
  3. 打开我的解决方案
  4. 清洁解决方案 OK
  5. 构建解决方案确定
  6. 可选重建确定
于 2021-04-16T09:03:14.830 回答
3

Microsoft Connect上有人建议建模项目负责冻结。我从我们的解决方案中删除了一个建模项目,并且从那时起(大约一周)没有经历过冻结。

于 2014-02-05T14:36:13.397 回答
2

VS2019 对我来说也出现了这个问题,就我而言,问题是由于存储在网络共享上的依赖关系。我有一种预感,Windows Defender Antivirus 正在扫描网络共享中的许多额外内容,这些内容只有在连接到相当慢的 VPN 时才能访问。

于 2020-04-21T17:30:40.583 回答
1

我将我的 VS 2008 开发平台从 Windows 7 移动到 Windows 10 并遇到了每次尝试构建大型项目时 Visual Studio 都会挂起的情况。我必须构建项目,然后使用任务管理器杀死 VS,然后重新启动。不用说,这让调试变得非常困难!无论如何,问题是在迁移到 Win 10 时,VS 不再以管理员身份运行(也许 Win 10 对权限更挑剔)。更改属性以使程序以管理员身份运行解决了该问题。(IngoB——我没有足够的状态来评论你的帖子,但感谢你指出这一点!)

于 2017-08-03T19:14:07.837 回答
1

视觉工作室 2017

从安装中删除 Anaconda3 修复了它。在 procmon 中,我看到数十万个调用从 msbuild 生成的数百个 powershell 实例中查找 Anaconda3 文件夹中的文件。

于 2019-02-08T00:21:42.670 回答
1

对我来说,这与自动运行的 npm package install 有关。我去了工具>选项>项目和解决方案>外部Web工具并取消选中所有外部工具并重新启动VS。在那之后,我能够再次构建它。我知道我需要检查它们,但我需要弄清楚是什么触发了它们以及这个解决方案文件有什么问题。

于 2018-07-05T14:43:10.250 回答
1

对我来说,问题在于一个在构建时自动运行 T4 模板的扩展(AutoT4)。使用 EF 解决方案时禁用它可以解决问题。

于 2016-05-23T08:34:16.520 回答
1

只需在管理员模式下尝试以下命令。在运行此命令之前,请确保关闭所有 VS 实例。

devenv /resetuserdata

注意:devenv 位于 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE

于 2018-04-05T10:31:30.007 回答
1

除了解决(或几乎解决)构建问题的felickz 的答案:

除了构建期间的问题外,我还遇到了包管理控制台的问题。等了大约一分钟。使用 procmon,我发现每次打开此窗口时都会解析 NuGet 存储库文件夹(非常聪明,Microsoft!)。此文件夹中大约有 1000 个包。从上述文件夹中删除所有内容后,性能问题就解决了。

请注意,我的回答与 VS 2015 相关(可能在下方)。我没有测试,但怀疑在 VS 2017 中应该没问题。

于 2018-05-10T08:21:01.167 回答
0

由于还原 nuget 包的问题,​​我遇到了这个问题。文件中有重复条目packages.config。构建不会将其报告为错误,而是永远挂起。

直到我尝试通过菜单中的“管理 Nuget 包...”选项恢复 nuget 包时才发现问题。删除副本后,构建正确完成。

于 2021-04-27T10:04:11.680 回答