【问题标题】:Team Foundation Build Property for Build Folder构建文件夹的 Team Foundation 构建属性
【发布时间】:2012-07-24 12:48:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: tfs tfsbuild


    【解决方案1】:

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

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

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

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

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

    这将下载项目 A + B 而不是 C。

    【讨论】:

      【解决方案2】:

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

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

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

      $/TP/SolutionA

      $/TP/Folder1/SolutionB

      $/TP/Folder1/SolutionC

      $/TP/Folder2/SolutionD

      并且您只想在构建中包含解决方案A 和解决方案C,您可以按如下方式设置工作区。

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

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

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


      问题编号 1。

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

      查看我的answer to this question 了解完整说明。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-04
        • 2020-01-18
        • 2010-10-03
        • 2013-07-02
        • 1970-01-01
        • 1970-01-01
        • 2012-04-17
        • 2013-04-19
        相关资源
        最近更新 更多