gpt4 book ai didi

TFSBuild.proj 和导入外部目标

转载 作者:行者123 更新时间:2023-12-04 10:02:42 27 4
gpt4 key购买 nike

我们希望将覆盖的构建目标存储在外部文件中,并将该目标文件包含在 TFSBuild.proj 中。我们有一个核心设置步骤,并且希望通过简单地将导入行添加到向导创建的 TFSBuild.proj 来获得这些额外的步骤。

<Import Project="$(SolutionRoot)/libs/my.team.build/my.team.build.targets"/>

我们无法导入 $(SolutionRoot) 中的任何文件因为在验证 Import 语句时,尚未从存储库中获取源。看起来 TFS 正在拉下 TFSBuild.proj首先没有任何其他文件。

即使我们添加条件导入,如果存在源代码管理中的版本,也不会被导入。将导入磁盘上已存在的先前版本。

我们可以放弃将这些构建目标与我们的源代码一起存储,但它是第一个从源代码树中移出的依赖项,因此我们不愿意这样做。

有没有办法:
  • 告诉 Team Build 拉下更多文件,以便那些 Import语句评估正确?
  • 覆盖那些 Team Build 目标,例如 AfterCompileImport 之外的方式?
  • 最终在 Team Build 中运行构建目标,这些目标保存在它试图构建的源代码下?
  • 最佳答案

    Team Build 有一个“引导”阶段,其中 Team Build Configuration 文件夹(包含 TFSBuild.proj 的文件夹)中的所有内容都是从版本控制下载的。这是在构建代理调用 MSBuild.exe 告诉它运行 TFSBuild.proj 之前由构建代理执行的。

    如果您从 SolutionRoot 下移动目标文件并将其放在 TFSBuild.proj 文件旁边的配置文件夹中,您将能够使用相对导入语句将其导入 TFSBuild.proj 文件,即

    <Import Project="myTeamBuild.targets"/>

    如果这些目标依赖于任何其他自定义 MSBuild 任务程序集,那么您也可以将它们放在与 TFSBuild.proj 文件相同的文件夹中,并且可以使用相对路径轻松引用它们。

    请注意,在 TFS2008 中,构建配置文件夹默认位于 $/TeamProject/TeamBuildTypes 下,但它不必在那里。它实际上可以存在于您的解决方案内的文件夹中 - 甚至可以是您的解决方案中专门用于 Team Build 的项目。这有几个优点,包括使构建的分支更容易。因此,我通常将我的构建放在这样的文件夹中:
    $/TeamProject/main/MySolution/TeamBuild

    另请注意,默认情况下,在构建的引导阶段,构建代理只会下载构建配置文件夹中的文件,不会递归到任何子文件夹中。如果您希望它在引导阶段包含子文件夹中的文件,那么您可以在构建代理机器上的 tfsbuildserver.exe.config 文件的 appSettings 中设置以下属性(位于 %ProgramFiles%\Visual Studio 9.0\Common7\IDE\私有(private)组件)
    <add key="ConfigurationFolderRecursionType" value="Full" />

    请注意,如果您有多个构建代理,您必须记住在所有机器上设置此设置,它会影响该构建代理执行的每个构建 - 所以实际上最好将文件保留在根目录中如果可以的话,构建配置文件夹。

    祝你好运,

    马丁。

    关于TFSBuild.proj 和导入外部目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/97349/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com