Visual Studio有时会决定重建我的整个庞大的项目,因为一个小小的改变。我将构建日志记录转到Diagnostic以查看问题所在,这就是我所看到的:
< Bunch of spam >
Outputs for C:\<snip>\PRECOMPILEDHEADERS.CPP:
C:\<snip>\PRECOMPILEDHEADERS.OBJ
All outputs are up-to-date.
Forcing rebuild of all source files due to a change in the command line
...然后重建我的预编译头文件,然后重建其他所有内容。
当我在项目中更改单个.cpp或.h文件时会发生这种情况。我没有改变项目设置中的任何内容。它也不会一直发生同样的变化;这是随机的。
关于这里发生了什么的任何想法?我在哪里可以获得更多信息?我尝试通过http://blogs.msdn.com/b/vsproject/archive/2009/07/21/enable-c-project-system-logging.aspx中的说明启用调试,但它没有提供任何更多信息。我无法弄清楚这个“由于命令行的更改而强制重建所有源文件”的来源。它不在任何工厂的MSBuild文件中。
其他一些信息:它是一个C ++ / CLI DLL项目,它链接了许多其他项目,包括C#,本机c ++和其他C ++ / CLI dll。我尝试从依赖项中删除所有C#项目,因为这些项目往往会导致问题,但这并没有改变它。我用谷歌搜索了那个特定的字符串,但是我的情况与报告它的任何其他人的情况都不匹配。 (一个是使用英特尔C ++,另一个是命令行中的MSBuild并且更改了案例。我正在从Visual Studio本身中获取构建解决方案。)
编辑以解释我尝试过的常见修复:
我尝试过只构建项目。做同样的事情。
我没有包含任何不存在的.h文件。
我删除了bin / object文件夹并从头开始重建。这通常会让它在几个版本中消失,但它会立即回来。
编辑#2:
在日志中找到可疑的东西:
3>Using "ResolveNonMSBuildProjectOutput" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
3>Task "ResolveNonMSBuildProjectOutput"
3> Resolving project reference "..\..\..\..\CommonCore\VS2010\Project1\Project1.vcxproj".
3> Project reference "..\..\..\..\CommonCore\VS2010\Project1\Project1.vcxproj" has not been resolved.
我的几个项目都重复了这个......我要追了下去,看看是否可能是项目参考提示路径的问题。
答案 0 :(得分:3)
好吧,这是一个老线程,但我最近遇到了同样的问题。 我的解决方案是禁用预编译的头文件 - 现在,一个源文件中的简单更改不会再导致“重建”。
答案 1 :(得分:2)
我最近遇到了与Visual Studio 2012相同的问题。我在Windows 7上使用Visual Studio 2012 Professional(2012.2)构建C ++项目。值得注意的是,我最近将解决方案从Visual Studio 2008迁移到Visual Studio 2012。
其中一个C ++项目(带有DLL项目作为参考的可执行文件)每次更改其编译单元时都会重建,例如:简单地保存main.cpp会导致所有编译单元(包括预编译的头)重建。我在构建日志中发现了以下消息:
Forcing rebuild of all source files due to a change in the command line since the last build.
我将构建日志文件详细程度转为诊断(工具&gt;选项&gt;项目和解决方案&gt;构建并运行)并比较干净构建中的日志文件和一个编译单元更改后的构建(强制完全重建)。我注意到了:
我把头发拉了出来。
我最终从头开始重新创建违规项目,而不是依赖于从2008年到2012年迁移过程中自动生成的项目。现在似乎表现得像预期的那样。
答案 2 :(得分:1)
我做了三件事,问题似乎已经消失了。我试图将其缩小一点,但我想我会继续发布它们:
请注意,这些东西中的部分或全部可能是伏都教......