Team Foundation构建属性的构建文件夹

时间:2012-07-24 12:48:30

标签: tfs tfs2010 tfsbuild

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

问题是,我不想硬编码c:\ build \ 3。我想可能有一个我可以使用的$()属性 - 有人可以建议吗?

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

这将下载项目A + B但不下载C.

答案 1 :(得分:1)

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

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

您不必在“上方”文件夹中进行映射,您可以映射单个文件夹,以便您的源代码如下所示。

$/TP/SolutionA

$/TP/Folder1/SolutionB

$/TP/Folder1/SolutionC

$/TP/Folder2/SolutionD

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

Workspace Mapping

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

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

enter image description here

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


问题1。

正如Dylan所说,可能最好的办法是在解决方案之间使用二进制参考。特别是在单独的团队项目中的解决方案。

查看我的answer to this question以获取完整说明。