【问题标题】:Visual Studio 2010 randomly says the command line changed, and rebuildsVisual Studio 2010 随机说命令行已更改,并重新构建
【发布时间】:2011-09-26 19:05:21
【问题描述】:

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.

这在我的几个项目中重复...我将追查它,看看是否可能是项目引用提示路径的问题。

【问题讨论】:

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


    【解决方案1】:

    好的,这是一个旧线程,但我最近遇到了同样的问题。 我的解决方案是禁用预编译的头文件 - 现在对一个源文件的简单更改不会再导致“重建”。

    【讨论】:

    • 是的,这绝对可以解决问题 :) 如果没有预编译的标头或者我们的东西构建速度太慢,我们将无法生存,但感谢您的输入。
    【解决方案2】:

    我最近在使用 Visual Studio 2012 时遇到了同样的问题。我在 Windows 7 上使用 Visual Studio 2012 Professional (2012.2) 构建 C++ 项目。值得注意的是,我最近将解决方案从 Visual Studio 2008 迁移到了 Visual Studio 2012。

    其中一个 C++ 项目(以 DLL 项目作为参考的可执行文件)在每次更改其编译单元之一时重新构建,例如简单地保存 main.cpp 会导致所有编译单元(包括预编译的头文件)重新构建。我在构建日志中发现了以下消息:

    由于自上次构建以来命令行中的更改而强制重新构建所有源文件。

    我将构建日志文件的详细程度设置为 DiagnosticTools > Options > Projects and Solutions > Build and Run)并比较了干净构建和构建的日志文件在更改了一个编译单元之后(强制完全重建)。我注意到:

    • 路径”已从一个版本更改为下一个版本(“;C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\VsGraphics " 好像最后被加了)
    • TaskTracker.exe 命令行与 CancelEvents 有所不同
    • 有一条关于未设置 OutputPath 的警告

    我拔掉了头发。

    我最终求助于从头开始重新创建有问题的项目,而不是依赖于 2008 年到 2012 年迁移过程中自动生成的项目。它现在的行为似乎符合预期。

    【讨论】:

    • 感谢分享。我还没有遇到 vs2012 的问题,但我们会看到... :)
    【解决方案3】:

    我做了三件事,问题似乎已经消失了。我正在尝试缩小范围,但我想我会继续发布它们:

    • 删除并重新添加了所有引用和项目引用
    • 修复了我的一个项目,它没有将 .NET 框架目标设置为 3.5 以匹配我的解决方案的其余部分(我侥幸逃脱,因为该项目并没有使用 .NET)
    • 将所有引用(包括系统引用)的“复制本地附属程序集”设置为 false。

    请注意,这些东西的一部分或全部可能是巫术......

    【讨论】:

    • 我向所有被我的比喻冒犯的巫毒教从业者道歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多