使用VS2010重新构建具有依赖项的项目时出现LNK1181错误

4

我有一个包含两个C++(CLR)项目的解决方案。其中一个项目引用了另一个项目,因此项目依赖项和构建顺序被正确反映。两个项目都针对同一输出文件夹。具有依赖关系的项目使用 Copy Local: false 配置了依赖项。

如果我仅"重新构建"依赖项,那么它将成功构建并且其目标将位于输出目录中。

当我"重新构建"整个解决方案(或依赖项目)时,我会遇到以下问题:

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

果然,依赖项输出已从输出目录中删除。如果我查看构建日志,依赖关系似乎已经正确地(重新)构建,但是这些输出似乎在依赖项目构建开始时立即被删除了。为什么会发生这种情况?

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

“重新生成”不应该是相当于“清理+构建”吗?

2个回答

1
在Visual Studio中进行重建会逐个清理和构建项目,因此可能发生以下情况:
  • 清理项目A。
  • 编译项目A。
  • 清理项目B,由于相同的输出目录,删除了来自项目A的部分输出。
  • 由于缺少依赖项,项目B无法构建。
更多讨论请点击此处

有道理,我猜。虽然对于两个C#项目的类似解决方案,它并不是这样工作的... - lesscode

1
第二个项目是在重新构建时从其输出目录中删除任何内容。清理不区分真正的项目输出文件和其他文件。Clean All后跟Build All并不能解决这个问题,因为在项目构建之间没有清理输出文件夹。简而言之,Visual Studio不支持多个项目输出到同一个文件夹。将它们输出到默认位置,然后让Visual Studio按照预期/设计复制依赖项。

没错。我有点困惑,因为我们已经有一个包含约100个C#项目的解决方案——所有项目都输出到同一个bin文件夹——一直运行得很好,所以我认为这是C++的限制,而不是Visual Studio的限制。 - lesscode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接