1

使用 TFS 2010,我需要构建一个依赖于不同团队项目中的其他几个解决方案的解决方案。我正在编辑我的构建定义并创建一个“要构建的项目”列表。在构建父解决方案时出现错误,因为它无法引用其他解决方案创建的程序集。所以我回去编辑构建定义并将 /p:ReferencePath="c:\builds\3\referencedproject\binaries\" 添加到“MSBuild Arguments”构建过程参数中。

问题是,我不想硬编码 c:\build\3。我想可能有一个 $() 属性我可以用它来代替 - 有人可以请教吗?

我遇到的另一个问题是“主要”项目和它引用的另外两个项目在源代码中处于同一级别。据我所知,我必须将源代码管理文件夹设置为高于此级别 - 恰好是根目录。这意味着 TFS Build 会获取根目录上的所有项目 - 其中包括我的构建不需要的数十个项目。这不是一个关键问题,因为它没有尝试编译这些不相关的项目,但它确实增加了构建周期的完成时间。这是避免这种情况的唯一方法,将我构建所需的项目“分组”到不同的 TFS 源文件夹中吗?

4

2 回答 2

2

对于参考问题,有几个选项。最常见的是通过将二进制文件签入到 TFS 来显式依赖特定版本。

例如,如果您的团队项目 A 依赖于团队项目 B,我会假设它们被设置为单独的项目,因为它们的发展方式不同,可能有不同的团队在处理它们,并且具有不同的发布周期。管理这种依赖关系的常用方法是将 B.dll 签入到团队项目 A 中(通常在专门为此目的的 lib 文件夹中),然后使用项目 A 的解决方案/项目中对 lib 文件夹中的 dll 的文件引用。

这种方法让项目 A 团队可以明确选择他们希望依赖的 B.dll 版本,并根据自己的时间表明确决定采用更新版本的 B.dll。

对于如何让构建定义下载仅选择源代码路径的另一个问题,您可以在设置构建定义时在工作区映射屏幕中指定多行。例如,您可能有以下内容:

$\ProjectA -> $(SourceDir)\ProjectA
$\ProjectB -> $(SourceDir)\ProjectB

这将下载项目 A + B,但不会下载 C。

于 2012-07-24T16:13:39.483 回答
1

我将从问题 2 开始,因为这应该是最容易解决的。

您有 2 个选项都涉及更改构建定义的工作区映射。

您不必映射到“上方”​​文件夹,您可以映射单个文件夹,因此如果您的源看起来像这样。

$/TP/SolutionA

$/TP/Folder1/SolutionB

$/TP/Folder1/SolutionC

$/TP/Folder2/SolutionD

并且您只想在构建中包含 SolutionA 和 SolutionC,您可以按如下方式设置工作区。

工作区映射

这将只获得您需要的代码并保留它们之间的相对路径。

另一种选择是使用隐藏,您映射“根”文件夹,然后隐藏您希望构建忽略的任何文件夹。

在此处输入图像描述

这两种方法都将限制构建运行时下载的源数量,并防止在未映射/隐藏的文件夹中发生签入时启动“连续”构建。


问题编号 1。

正如 Dylan 建议的那样,最好的办法可能是在解决方案之间使用二进制引用。特别是在单独的团队项目中的解决方案。

查看我对这个问题的回答以获得完整的描述。

于 2012-07-24T16:43:22.653 回答