Visual Studio 2010随机说命令行已更改,并重建

时间:2011-09-26 19:05:21

标签: visual-studio-2010 c++-cli rebuild

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.

我的几个项目都重复了这个......我要追了下去,看看是否可能是项目参考提示路径的问题。

3 个答案:

答案 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;构建并运行)并比较干净构建中的日志文件和一个编译单元更改后的构建(强制完全重建)。我注意到了:

  • 路径”已从一个版本更改为下一个版本(“; C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ Extensions \ Microsoft \ VsGraphics “似乎最终得到了解决”
  • TaskTracker.exe 命令行与 CancelEvents
  • 的区别有所不同
  • 警告 OutputPath 未设置

我把头发拉了出来。

我最终从头开始重新创建违规项目,而不是依赖于从2008年到2012年迁移过程中自动生成的项目。现在似乎表现得像预期的那样。

答案 2 :(得分:1)

我做了三件事,问题似乎已经消失了。我试图将其缩小一点,但我想我会继续发布它们:

  • 删除并重新添加了所有引用和项目引用
  • 修复了我的一个未将.NET框架目标设置为3.5以与我的解决方案的其余部分相匹配的项目(因为项目没有使用.NET,所以我正在使用它)
  • 为包括系统参考在内的所有参考设置“复制本地卫星装配”为false。

请注意,这些东西中的部分或全部可能是伏都教......