选择"Debug | Start new instance"时多次重建



我有一个大型的Visual Studio 2010解决方案(大约110个C#项目)。一个项目(我们称之为"A")是一个控制台应用程序,它与其他项目和一些第三方程序集有大约6个依赖项。

如果我构建项目"A",它将按预期构建依赖项。

如果我右键单击项目"A"并选择"调试|启动新实例",它将首先构建项目,然后继续构建大量其他项目。观察"输出"窗口,就好像它不断地重新启动这些其他项目及其依赖项的构建过程。

问题是,原始项目"A"不依赖于Visual Studio在启动调试器之前正在生成的这些其他项目(直接或间接)。

这意味着调试器需要很长时间才能启动。

我在其他一些项目中自定义了.csproj文件,但没有自定义"A"项目。

通过msbuild的命令行构建都表现正常。

是什么原因导致Visual Studio这样做?

这是由MSBuild的引用链引起的。项目A依赖于项目B,项目B依赖于项目C,依此类推

你有两个选择:

  1. 默认情况下,当前解决方案中使用Copy Local=true标记的新引用。这个过程是构建过程中最耗时的过程之一。有时,只让最顶层的项目(.exe文件)具有copy local属性是有意义的,因为lib项目无论如何都不会从自己的输出文件夹中运行。

  2. 在解决方案Properties->Configuration Properties-默认情况下,每个项目都标记为要构建。您可以取消选中生成中不相关的项目。此设置将保存在.sln文件中,因此请确保您没有签入此修改—这可能会导致CI生成失败。

编辑:

  • 若要进一步分析生成过程,请增加MSBuild详细信息:Tools>Options>Projects and Solutions>Build and Run>MSBuild project build output verbosity,并设置为DetailedDiagnostic。这将帮助您跟踪构建输出的细微差别

最新更新