Visual Studio 项目导入后无法构建 2012 C++ 解决方案

Visual Studio 2012 C++ solution cannot be built after project import

我使用 Visual Studio 2012 Premium(版本 11.0.61219.00 更新 5)。一些项目有一个 C++ 解决方案。一切都可以毫无错误地构建。然后我将一个新的(但已经存在的)项目导入到这个解决方案中(通过右键单击 -> Add -> Existing Project...)。如果我现在尝试构建这个项目或之前的任何其他项目,则会出现一条错误消息:"Cannot perform requested action because a build is already in project"(这不是真的,没有构建 运行)。

如果我尝试重建完整的解决方案,则会显示另一条消息:"The operation could not be completed. Wrong parameter."

同时,输出视图中完全没有错误或警告。而是给出了构建摘要,看起来不错。

Build Summary
-------------

Total build time: 00:12.379

========== Rebuild All: 0 succeeded or up-to-date, 0 failed, 12 skipped, Completed at 30.09.2015 17:15:58 ==========

这里可能出了什么问题?该项目似乎完好无损,我可以打开并查看属性,没有任何可疑之处。事实上,我以相同的方式从同一来源导入了其他 11 个项目。我在哪里可以获得一些 Visual Studio 日志文件或打开任何可以为我指明正确方向的扩展诊断? 帮帮我,我卡住了!

我们现在弄清楚了这种行为的原因。 "guilty" 项目包含对解决方案中其他项目的引用。其他项目也这样做了(并且有效);但此特定引用的项目 GUID 与引用项目的实际 GUID 不一致。如果我们在文本编辑器中查看 *.vcxproj 文件的内容,我们会发现此 GUID 是 <ProjectReference> 元素中嵌套的 <Project> 元素(s. 屏幕截图)。

正如我在评论中提到的,所有项目都是从以特定领域语言编写的外部规范生成的。生成器机制中存在一个微妙的错误,在某些情况下会导致此错误的 GUID 引用。

然而,令我吃惊的是Visual Studio竟然没有针对如此明显的问题显示任何易于理解的错误信息!如果参考项目的路径不正确,Studio 会用粗体感叹号指出这一点(见屏幕截图)。如果 GUID 无效,为什么不这样做呢?我们花了几个小时来诊断这件小事。