注意:仅适用于 C++。
背景:在将大量项目解决方案从 VS 2008 移植到 2012 时,我们面临着将项目引用调整为新的 VS 2010+ 风格的挑战。在 VS 2008 中,您可以创建对另一个 C++ 库模块的链接时引用,并将其作为“项目依赖项”存储到解决方案文件中。在 2012 年,这些仅影响构建顺序,但为了创建链接时引用,必须通过 [References...] 添加它,现在存储在每个项目中。
现在的问题:由于在 VS2010+ 项目到项目的引用存储在项目文件而不是解决方案中,如果有人添加一个项目并引用另一个解决方案而不手动添加每个引用项目,这会破坏解决方案(但允许您去做),我们得到臭名昭著的“项目文件''已被重命名或不再在解决方案中”每次尝试构建时甚至不包括项目名称的错误。似乎 VS 并没有为此做好准备。不幸的是,在我们的解决方案中有 300 多个相互依赖的项目,我们确实需要允许将其拆分为更小的部分,以方便许多程序员。
有谁知道定义 C++ 库引用的方法,这样当您加载它并且引用的项目不是其中的一部分时它不会破坏解决方案?我知道在这种情况下引用仍然不起作用,我们非常愿意处理这个问题(让创建新解决方案的人手动将其指定为链接器输入)但收到此错误消息(这并不能说明问题出在哪里is) 是不可接受的,并且禁止我们尝试从 2008 年迁移到 2012 年。我们希望有一个完整的、巨大的解决方案,由自动化的 MSBuild 过程使用来构建所有内容,但仍然可以选择将一些项目包含在较小的解决方案中,而无需收到此错误。
我正在研究如何指定一个令人满意的条件表达式
<ProjectReference Include="..\..\xxx\ProjectName.vcxproj" Condition="...">
- 如果我们只能指定一个表达式,仅当 vcxproj 是当前加载的解决方案的一部分时才处理它,这样我们就不会触发错误。有没有人有这方面的经验?还是有更好的方法来解决这个问题?在 2008 年,在 .sln 而不是 .vcproj 中指定了引用,您只需在任何其他解决方案中重新重做它们。既费时又烦人,但至少你没有得到一个显示停止器的错误,一旦你包含一个具有依赖关系的项目,它就不会告诉你罪魁祸首。
感谢您的任何见解。