使用TFS 2010我需要构建一个依赖于不同团队项目中的其他解决方案的解决方案。我正在编辑我的构建定义,并且我创建了一个“要构建的项目”的列表。当构建父解决方案时,我得到一个错误,因为它无法引用其他解决方案创建的程序集。所以我回去编辑构建定义并添加/ p:ReferencePath =“c:\ builds \ 3 \ referencedproject \ _binaries \”到“MSBuild Arguments”构建过程参数。
问题是,我不想硬编码c:\ build \ 3。我想可能有一个我可以使用的$()属性 - 有人可以建议吗?
我遇到的另一个问题是'Main'项目和它引用的另外两个项目在源代码中处于同一级别。据我所知,我必须将源控制文件夹设置为高于此级别 - 这恰好是根。这意味着TFS Build会对根目录下的所有项目进行获取 - 其中包括我的构建不需要的许多项目。这不是一个关键问题,因为它没有尝试编译这些非相关项目,但它确实增加了构建周期完成的时间。这是避免这种情况的唯一方法,将我构建所需的项目“分组”到另一个TFS源文件夹中吗?
答案 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,您可以按如下方式设置工作区。
这将获得您需要的代码并保留它们之间的相对路径。
另一种选择是使用隐藏真实内容,映射“Root”文件夹,然后隐藏您希望构建忽略的任何文件夹。
这两种方法都会限制构建运行时下载的源数量,并且还会阻止“连续”构建在未映射/隐藏的文件夹中发生签入时启动。
问题1。
正如Dylan所说,可能最好的办法是在解决方案之间使用二进制参考。特别是在单独的团队项目中的解决方案。
查看我的answer to this question以获取完整说明。