新更新:
正如另一个答案中所报道的,我找到了一种解决方法,对于一个短暂的功能分支来说是可以的,但它确实不能很好地工作。从那以后我又回到了这个问题上,完整的解决方案非常简单:
在 TFSBuild.proj 中,路径基于 $(BuildProjectFolderPath)。此路径解析为 $/Main 之类的服务器端(源代码控制路径),而不是本地路径 (D:\ServerBuildFolder\Main)。
不幸的是,由于历史原因,我们的源代码被拆分为多个团队项目,这意味着一个“分支”在源代码控制中被分割成多个分支文件夹(即 $/Main/Code 和 $/Libraries/Code。您无法创建包含 $/Main 和 $/Libraries 的分支)。因此,我们必须使用工作区映射将这些不同的片段从源代码控制重新组合成一个连贯的层次结构。
这意味着 Richard 发现了 - 从 TFSBuild.proj 文件到 .sln 文件的相对路径不正确,因为 MSBuild/TFS 假设 .sln 位于相同的团队项目和源代码控制层次结构中(因此正在寻找$/Main/Libraries.sln 而不是 $/Libraries/Libraries.sln)。
解决方案很简单:我将 $(BuildProjectFolderPath) 替换为文件的本地路径(例如 D:\ServerBuildFolder\Main),以便在“本地空间”中解析相对引用(在应用映射之后),并且MSBuild 现在运行良好。
故事的寓意:1) 如果您有任何机会希望在这些代码库之间有任何类型的引用,切勿使用多个团队项目。不要误以为新的团队项目会在应用程序/库之间提供某种无痛的逻辑区分。额外的项目已被证明只是管理方面的噩梦——大量额外的问题绝对是零收益。(在引擎盖下都是一大堆共享文件,所以所有工作项和源代码管理文件夹在所有项目中仍然可见(!),但它增加了一些砖墙,使项目间链接非常有问题)
2) 始终在您的团队项目源代码管理中创建一个根级文件夹,然后将其他所有内容放在该文件夹下。例如,对于项目“$/Main”,创建“$/Main/Root”,然后将源层次结构中的所有内容放入 Root 中。
通过遵循这些规则,您将来可以分支单个“根”文件夹,然后只需要一个分支和一个额外的工作区映射。这将帮助您避免过早秃顶。
(在我的辩护中,我会以这种方式开始 - 我正在使用旧版设置。在为旧版设置辩护时,这在纸上听起来不错,但不是微软支持的方法!)