为什么每次我点击“播放”按钮时,VS都必须重新构建我所有的项目?

16

我是否有一些奇怪的设置导致这种情况发生?我只想更改一个消息框的文本(没有其他程序依赖于它),但是VS重新构建了所有项目,这需要很长时间。有什么建议吗?


我在我的WPF应用程序中遇到了同样的问题。根据您对JaredPar的评论,也许与WPF有关。 - lightw8
6个回答

32

您可以查找导致Visual Studio认为每个项目已过期的原因,然后直接解决该问题。

  1. 选择“工具”→“选项”→“项目和解决方案”→“生成和运行”。
  2. 对于“MSBuild项目构建输出详细程度:”设置,请选择“诊断”。
  3. 进行构建。

您将在输出窗口中获得大量明确说明构建正在执行的输出。在构建每个项目之前,它会打印出为什么认为它已过期的原因。以下是此类输出的示例:

Project 'Foo' is not up to date. Input file 'c:\Bar.cs' is modified after output file

这些“不是最新的”消息应该指向无需构建的真正原因,然后您可以进行修复。


有趣!感谢这个有用的提示。我不能说我最近在VS 2015中遇到过这个问题,但如果我再次遇到它,我会在这里更新我的“诊断”输出经验。 - lightw8
4
非常感谢!对于我来说,“真正的原因”是几乎所有项目中都有一个额外的配置文件,其中“复制到输出目录”设置为“始终复制”而不是“仅在更改时复制”。 - Michael G.

16

如果你勾选“仅在运行时构建启动项目和依赖项”这个选项,即使没有使用配置文件,也可以对此进行一些有限的控制。

路径:工具 → 选项 → 项目和解决方案 → 构建和运行 → 仅构建启动项目和依赖项


12

您可以通过构建菜单将项目从通用构建中排除。

构建 → 配置管理器 → 取消选中您不想始终构建的项目。

这样做可以通过仅构建每次必须构建的项目来大大加快构建时间。

但请注意,如果需要重建已取消选择的项目,则必须单独构建这些项目(右键单击->在项目上进行构建等)。

您还可以设置备用构建配置,以便在何时构建时混合和匹配。


这是所有建议中最有影响的,因为我不需要对大多数项目进行任何更改。如果VS能够检测到项目尚未更新,因此不构建它,那就更好了。 - skb
9
由于这并没有解决他遇到的问题。由于某些原因,VS未能确认构建依赖项已经更新,而强制重新构建。我仍在遇到麻烦(自从转换到VS 2012以来),希望能得到任何建议! - lightw8
@DavidCuccia David,请看一下我的回答。它解释了如何确定 Visual Studio 为什么认为需要重新构建每个项目的原因。 - Mark Meuer

1

还有一种可能的方法是将设置'在运行时,当项目过期'改为'从不构建',而不是'询问'。(它在菜单'工具->选项->项目和解决方案->构建和运行'中)这样,每次您更改过期项目时都需要按F6来构建,但至少它将允许您使用F5进行调试,而无需重新编译。

我必须说,这不是理想的解决方法,但至少有点作用。然而,在使用Casini时,我遇到了一个问题:应用程序池没有每次按F5时循环使用,因为Casini保持运行。当你遇到问题时,你必须手动停止Casini的图标才能解决,但它比重建整个站点节省了大量时间。


1

播放按钮是启动调试功能。

是的,Visual Studio将在那一点上要求解决方案中的每个项目进行构建。但请注意,请求构建和实际构建是不同的事情。请求构建只是说,即将执行某些构建操作,如果需要,请再次构建。然后,MsBuild将在幕后进行一些检查,并决定是否应该实际构建底层项目。

如果您的项目实际上正在构建,则可能存在其他问题。您能否提供一些更多信息,例如语言、项目类型等...


1
这是一个相当简单的情况。我有一个WPF应用程序(XAML/C#)作为启动项目,然后我有11个类库项目(C#),WPF直接或间接地引用了其中的一些类库项目。每次我点击Build或Play时,它们都会进行构建,无论我是否对它们进行了任何更改。这种情况正常吗?有没有办法在没有更改的情况下不进行构建呢? - skb
1
我在我的WPF应用程序中遇到了同样的问题。也许与WPF有关。 - lightw8

-3

“播放”按钮可能不是您想象的那样,或者您在项目设置中关闭了增量链接等功能。


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