2012-03-15 54 views
2

我有一个大型的Visual Studio 2010解决方案(约110个C#项目)。一个项目(我们称之为'A')是一个控制台应用程序,它对其他项目和一些第三方程序集有大约6个依赖关系。选择“调试|启动新实例”时进行多次重建

如果我构建项目'A',它会按预期构建依赖关系。

如果我右键单击项目'A'并选择Debug |开始新实例,它首先构建项目,然后继续构建大量其他项目。看着输出窗口,就像它不断重新启动这些其他项目及其依赖项的构建过程。

问题在于,在启动调试器之前,原始项目“A”不依赖Visual Studio构建的这些其他项目(直接或间接)。

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

我已经在一些其他项目中自定义了.csproj文件,但未定制'A'项目。

通过msbuild进行命令行构建的行为都正常。

什么会导致Visual Studio做到这一点?

+0

您是否找到解决此问题的解决方案?我有完全相同的问题,我已经浪费了一天的时间来解决这个问题? – Hunter 2013-02-13 19:44:44

+1

不完全。我似乎通过从零开始重新创建一些项目(并添加项目引用)来解决问题。我的理论是这样做的,也许.sln文件中的某些元数据已经搞乱了。 – 2013-02-13 23:09:57

回答

2

这是由于MSBuild的参考链引起的。项目A取决于依赖于项目C的项目B等。

你有两个选择:

  1. 通过标有Copy Local=true当前的解决方案做出默认新的参考。这个过程是构建过程中最耗时的过程之一。有时只有最上面的项目(.exe文件)和复制本地属性是有道理的,因为lib项目无法从自己的输出文件夹运行。

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

编辑:

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

我了解你提到的参考链。当我定期构建时,这很有意义 - 它按预期构建了依赖项目。 我不指望在执行调试实例时重建不相关的项目。为什么参考链在调试与常规构建时会有所不同? – 2012-03-18 10:34:31

+0

查看更新以了解如何分析构建输出。基本上VS有一个内置的机制来检测变化。这个特性服务于被称为“增量构建”的概念。 [这是一篇相关文章](http://stackoverflow.com/a/9145250/147211)。 – KMoraz 2012-03-18 11:59:09

+0

是的,一个很好的建议。这种构建方案的一个问题是每次重新启动其他项目的构建过程时,它也会清除“输出”窗口。所以你只能得到最后构建的依赖项的构建输出 - 所有以前的依赖项都会丢失。并且要清楚,在执行单个“调试启动新实例”后,这些多个构建过程都会顺序发生 – 2012-03-18 22:52:56

相关问题