Visual Studio 有时会因为一个小改动而决定重建我的整个大型项目。我将构建日志记录转到诊断以查看问题所在,这就是我所看到的:
< 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# 项目,因为它们往往会导致问题,但这并没有改变它。我已经用谷歌搜索了那个特定的字符串,但我的情况与其他任何报告它的人都不匹配。(一个是使用 Intel 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.
这在我的几个项目中重复......我将追查它,看看是否可能是项目参考提示路径的问题。