【问题标题】:What does Visual Studio 2010 do before invoking msbuild?Visual Studio 2010 在调用 msbuild 之前做了什么?
【发布时间】:2011-08-04 18:20:34
【问题描述】:

我在 Visual Studio 没有调用 msbuild 来实际构建我的解决方案时遇到问题。从命令行调用 msbuild 会产生正确的构建,但在 Visual Studio 中开始构建会导致“一切都是最新的”消息。手动编译 .cpp 文件似乎可以部分或完全解决问题。

重启VS2010并不能解决问题,所以我觉得VS2010一定是在某个地方写了自己的依赖信息。依赖信息是指实际需要构建哪些文件,也就是自上次成功构建以来哪些文件已被更改。

VS2010 是否在调用 msbuild 之前执行它自己的依赖项检查?它在哪里存储这些信息?

【问题讨论】:

  • 问题是 - 它不做什么? :-)
  • 您是在询问依赖检查,如哪些项目需要先于其他项目构建,还是更改文件检测?
  • @tuxedo25: 更改文件检测,我会尝试在帖子中澄清。
  • 你说的是调用msbuild的makefile项目吗?
  • 不,这是一个标准的 C++ 解决方案,由几个 c++ vcprojs 组成,我假设 Visual Studio 会将实际建筑交给 msbuild,因为这是我的谷歌搜索所表明的。

标签: c++ visual-studio-2010 msbuild


【解决方案1】:

要强制从 Visual Studio GUI 进行构建,您可以选择“全部重建”。这将触发所有源文件的编译。

常规版本无法运行的问题可能与您 PC 中的时钟设置不正确有关。确保您的系统时钟正确,包括时区。然后做一个“干净”的项目并尝试再次构建。

【讨论】:

  • 没有时间戳问题,我已经在几台电脑上验证了这个问题。我在安装 VS2010 SP1 后没有见过它,但我在发行说明中没有发现任何内容表明该问题已得到特别修复。
  • 确实 SP1 不能解决问题。问题可能是 .sln 特定的。
【解决方案2】:

我爸爸说要检查你的“obj 文件夹”并将其清理干净。 VS2010 看到那里有东西,所以它假设没有什么新东西要构建。

【讨论】:

    【解决方案3】:

    我偶尔会看到这种行为,但我无法解释它是如何被破坏的。

    尝试删除所有中间文件:DebugRelease 目录中的所有内容,以及 .suo.ncb.aps 类型的项目名称文件。然后全部重建。

    如果您遇到与我相同的行为,这往往会使 VS 正常工作一段时间——几周或 50-100 次构建(以先到者为准)。

    【讨论】:

    • 不要删除.sln文件!这是定义需要构建哪些项目的 Visual Studio 解决方案文件,以及一些更重要的内容。
    • @Spire:我已经从我的回答中删除了它:我看了一个 C++ 项目,它的内容看起来没有必要:.vcproj 不是唯一必要的粘合剂吗?
    • .sln 文件包含配置信息(例如,DebugRelease)、平台信息(例如,Win32x64)、项目依赖关系和其他重要的东西通常不能自动重新创建。解决您关于.vcproj 的问题:在Visual Studio 2010 中,.vcxproj.vcxproj.filters 文件也不应该被删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多