VS 2012 C++;-可能不是同一解决方案一部分的项目到项目引用 注释:仅适用于C++。

VS 2012 C++;-可能不是同一解决方案一部分的项目到项目引用 注释:仅适用于C++。,c++,visual-studio-2012,dependencies,C++,Visual Studio 2012,Dependencies,背景:在从VS2008到2012年移植一个庞大的项目解决方案时,我们面临着将项目引用调整为新的VS2010+样式的挑战。在VS 2008中,您可以创建指向另一个C++库模块的链接时间引用,并将其存储到解决方案文件中,作为“项目依赖项”。2012年,这些仅影响构建顺序,但为了创建链接时间引用,必须通过[引用…]添加链接时间引用,这些引用现在存储在每个项目中 现在的问题是:由于在VS2010+中,项目到项目的引用存储在项目文件中,而不是存储在解决方案中,如果有人添加了一个包含对另一个解决方案的引用的

背景:在从VS2008到2012年移植一个庞大的项目解决方案时,我们面临着将项目引用调整为新的VS2010+样式的挑战。在VS 2008中,您可以创建指向另一个C++库模块的链接时间引用,并将其存储到解决方案文件中,作为“项目依赖项”。2012年,这些仅影响构建顺序,但为了创建链接时间引用,必须通过[引用…]添加链接时间引用,这些引用现在存储在每个项目中

现在的问题是:由于在VS2010+中,项目到项目的引用存储在项目文件中,而不是存储在解决方案中,如果有人添加了一个包含对另一个解决方案的引用的项目,而没有手动添加每个引用项目,这会破坏解决方案(但允许您这样做),我们会得到臭名昭著的结果“项目文件“”已重命名或不再在解决方案中“每次尝试构建时都会出错,甚至不包括项目名称。似乎VS没有为此做好准备。不幸的是,在我们的解决方案中,有300多个项目相互依赖,为了方便许多程序员,我们还需要允许将其拆分为更小的部分

有人知道一种定义C++库引用的方法,这样它不会在加载它时中断解决方案,而引用的项目不是它的一部分吗?我知道在这种情况下,引用仍然不起作用,我们非常愿意处理这个问题(让创建新解决方案的人手动将其指定为链接器输入),但得到这个错误消息(它不会告诉问题在哪里)是不可接受的,并阻止我们从2008年迁移到2012年的尝试。我们希望有一个完整、庞大的解决方案,由自动化的MSBuild流程使用它来构建所有内容,但仍然可以选择将一些项目包含到较小的解决方案中,而不会出现此错误

我正在研究如何指定一个令人满意的条件表达式
-如果我们只能指定一个表达式来处理这个问题,那么只有当vcxproj是当前加载的解决方案的一部分时,我们才不会触发错误。有人有这方面的经验吗?还是有更好的方法来解决这个问题? 在2008年,在.sln而不是.vcproj中指定了引用,您只需在任何其他解决方案中重新执行它们。耗时且令人恼火,但至少您没有得到一个showstepper错误,当您包含一个具有依赖关系的项目时,该错误不会告诉您罪魁祸首


感谢您提供的见解。

在深入研究了MSBuild功能后,我发现我们可以轻松地将项目引用仅包含在特定解决方案文件名中,并且它确实消除了错误。但是,是否有可能找到一个更健壮的解决方案来检测包含的项目是否是当前加载的解决方案的一部分,如果不是,则将其排除在外?如果较小的解决方案仍然至少有一些依赖关系,那就太好了。对于如此大的解决方案,这只是扩展性不够好。只需直接指定链接依赖项、链接器+输入、其他依赖项。这样,当您从大型解决方案创建小型解决方案时,它也可以工作,而不必进行任何更改。