4

我有两个 C++ (CLR) 项目的解决方案。一个项目引用另一个项目,因此项目依赖项和构建顺序正确反映了这一点。两个项目都针对相同的输出文件夹。依赖项目的依赖项配置为Copy Local: false.

如果我自己“重建”依赖项,它会构建得很好,并且它的目标位于输出目录中。

当我“重建”解决方案(或依赖项目)时,我得到:

error LNK1181: cannot open input file '<outdir>\Dependency.lib'

果然,依赖输出从输出目录中消失了。如果我查看构建日志,依赖项似乎已经(重新)正确构建,但是一旦依赖项目构建开始,这些输出似乎就被删除了。为什么会这样?

此外,当我“清理”解决方案,然后立即“构建”解决方案时,我没有收到任何错误。

“重建”不应该有效地清洁+构建吗?

4

2 回答 2

1

Visual Studio 中的重建会一个一个地清理和构建项目,所以最终可能发生的是

  • 项目 A 已清理。
  • 项目 A 已编译。
  • 项目 B 被清理,由于相同的输出目录,从项目 A 中删除部分输出。
  • 由于缺少依赖项,项目 B 无法构建。

更多讨论在这里

于 2012-08-28T16:03:45.920 回答
1

当您对其执行重建时,第二个项目正在从其输出目录中删除任何内容。清理不区分真正的项目输出文件和其他文件。Clean All 后跟 Build All 不会导致它,因为在项目构建之间没有清理输出文件夹。简而言之,Visual Studio 不支持多个项目输出到同一个文件夹。将它们输出到它们的默认位置,然后让 Visual Studio 按照预期/设计的方式复制依赖项。

于 2012-08-28T16:07:01.320 回答