English 中文(简体)
在Visual C++解决方案中查找过时或缺失的依赖项或输出文件(或者:为什么VS要在没有更改的情况下重新构建项目?)
原标题:
  • 时间:2008-10-15 14:21:54
  •  标签:

我有一个包含多个项目的解决方案。我只修改其中一个项目的代码,但每次我按 Ctrl+Shift+B,Visual Studio 就会重新生成所有其他项目。

我想它可以构建其他项目,所以这很好。不好的是,通常它会发现没有什么可做的。我在某个地方有一个错误的依赖,所以这不起作用。

有没有一种工具或宏(或开关),可以探索依赖树并告诉我哪些文件丢失或过时,以便我让它停止?

我知道我可以通过(例如)触摸所有项目文件来解决这个特定的案例。

很遗憾,我经常见到这种情况,当文件配置成生成输出文件时(例如,IDL文件配置成输出类型库,但是没有包含库块,因此它永远不会创建一个TLB)。

这不会通过触碰所有项目文件来解决,所以我正在寻找更通用的工具,以便将其添加到我的个人工具箱中,它将轻松告诉我为什么正在重建文件,无论是因为它比依赖项旧,还是因为项目配置不当,期望永远不会生成输出文件。

最佳回答

虽然没有直接回答我的问题:"有没有一种工具可以为我解决这个问题?",但我使用SysInternals Process Monitor找到了具体问题。

该项目已配置为/analyze,这需要使用Visual Studio Team Edition,但此PC上的版本为Visual Studio Professional,不支持它。不幸的是,Visual Studio似乎存在一个错误,它认为应该创建.pchast文件,即使它没有办法去创建。我已在Connect上提出了这个问题。

我认为我可能会为Visual Studio Professional编写一个宏,如果/ analyze被打开,只需在构建结束时创建一个空的.pchast文件...

问题回答

在“选项/项目和解决方案/构建和运行”中,将MSBuild项目构建输出详细程度调高。这将使您了解为什么重新构建所有项目的原因。

如果我了解你的意思,你可能可以通过触摸所有项目文件来解决这个问题。这可能是由于一个源文件的最后修改时间在未来造成的。

编辑:

我知道我可以解决这个特定的案例,例如,通过接触所有的项目文件,但我想向我的私人技巧箱中添加一些东西,以便在将来的一般情况下使用。

我很困惑-这个问题的一般情况是什么?

我没有发现这个。如果您知道一个项目不会经常更改,可以告诉配置管理器不要构建它。(右键单击解决方案,选择配置管理)。

据我所知,ctrl + shift + b默认绑定到BuildSolution,这就是为什么你的所有项目都被构建的原因。我不确定你除了右键单击项目并按构建键之外还能使用什么别的方法 :)

您可能需要在“工具>选项>项目和解决方案”中检查,确认您的选项是否设置为仅构建启动项目和依赖项,而不是整个解决方案。

或者,您可以直接按下要构建的项目上的 F6,而不是使用 ctrl+shirt+b :)

你可以使用 shift+F6 仅构建当前项目。





相关问题
热门标签