可自定义的 Team Foundation Build 目标

MSBuild 目标定义了如何生成 MSBuild 项目。 Microsoft.TeamFoundation.Build.targets 文件为 Team Foundation Build 定义了用于所有 Team Foundation Build 类型的目标层次结构和一组预定义的 MSBuild 任务和目标。 生成定义包括一个名为 TfsBuild.proj 的项目文件。 该项目文件既可以只与一个生成定义相关联,也可以与多个生成定义相关联。 TfsBuild.proj 可导入 Microsoft.TeamFoundation.Build.targets 文件,并为各种属性和项组提供值。 您可以自定义 TfsBuild.proj 文件来重写层次结构中的某些扩展点目标。 该目标文件位于生成代理上的 <根>:\Program Files\MSBuild\Microsoft\VisualStudio\TeamBuild 目录中。

重要说明重要事项

请勿修改 Microsoft.TeamFoundation.Build.targets 文件。

有关 MSBuild 目标的更多信息,请参见 MSBuild 目标

可以使用任务进行自定义的目标

任务包含在目标中。 这些任务提供在生成过程中运行的代码。 下表列出了针对可扩展性定义的所有 Team Foundation Build 目标。 根据生成过程中必须运行自定义任务的时间,将任务插入到其中的一个目标中。

提示

建议不要重写其他目标。

Target Name

说明

BeforeEndToEndIteration

将任务插入到此目标中,以便在生成过程刚刚开始时运行自定义任务。

AfterEndToEndIteration

将任务插入到此目标中,以便在生成过程结束时运行自定义任务。

BeforeInitializeWorkspace

将任务插入到此目标中,以便在工作区初始化之前运行自定义任务。

AfterInitializeWorkspace

将任务插入到此目标中,以便在工作区初始化之后运行自定义任务。

BuildNumberOverrideTarget

将任务插入到此目标中,以便自定义版本号或放置位置属性。 您所编写的任务必须创建一个名为 BuildNumber 的输出属性。

BeforeClean

在尝试清除之前调用。 将任务插入到此目标中,以运行清除前的自定义任务。

AfterClean

在清除完成之后调用。 将任务插入到目标,以运行清除后自定义目标。

BeforeGet

在从源代码管理检索源代码之前调用。 将任务插入到此目标中,以在检索源代码之前运行自定义任务。

AfterGet

在检索源代码之后调用。 将任务插入到此目标中,以在检索源代码之后运行自定义任务。

BeforeLabel

在对源代码进行标记之前调用。 将任务插入到此目标中,以在 Label 目标之前运行自定义任务。

AfterLabel

在完成标记之后调用。 将任务插入到此目标中,以在 Label 目标之后运行自定义任务。

BeforeCompile

在编译启动之前调用。 任务插入到此目标中,以在编译代码文件之前运行自定义任务。

BeforeCompileConfiguration

将任务插入到此目标中,以便在编译个别配置之前运行自定义任务。

BeforeCompileSolution

将任务插入到此目标中,以便在编译个别解决方案之前运行自定义任务。

AfterCompileSolution

将任务插入到此目标中,以便在编译个别解决方案之后运行自定义任务。

AfterCompileConfiguration

将任务插入到此目标中,以便在编译个别配置之后运行自定义任务。

AfterCompile

在编译完成之后调用。 将任务插入到此目标中,以在编译代码文件之后运行自定义任务。

BeforeGetChangesetsAndUpdateWorkItems

将任务插入到此目标中,以便在关联变更集和更新工作项之前运行自定义任务。

AfterGetChangesetsAndUpdateWorkItems

将任务插入到此目标中,以便在关联变更集和更新工作项之后运行自定义任务。

BeforeTest

在运行测试之前调用。 将任务插入到此目标中,以在 Test 目标之前运行自定义任务。

BeforeTestConfiguration

将任务插入到此目标中,以便在测试个别配置之前运行自定义任务。

AfterTestConfiguration

将任务插入到此目标中,以便在测试个别配置之后运行自定义任务。

AfterTest

在测试完成之后调用。 将任务插入到此目标中,以在 Test 目标之后运行自定义任务。

BeforeDropBuild

在将生成的二进制文件、生成日志文件和测试结果保存到发布服务器上的生成放置目录之前调用。 将任务插入到此目标中,以在将生成的文件保存到放置目录之前运行自定义任务。

AfterDropBuild

在将生成的二进制文件和测试结果放置到发布服务器之后调用。 将任务插入到此目标中,以在将生成的文件保存到放置目录之后运行自定义任务。

BeforeCreateWorkItem

将任务插入到此目标中,以便在创建工作项之前运行自定义任务。

AfterCreateWorkItem

将任务插入到此目标中,以便在创建工作项之后运行自定义任务。

BeforeOnBuildBreak

在创建工作项之前作为生成中断的结果来调用。 将任务插入到此目标中,以在 BuildBreak 目标之前运行自定义任务。

AfterOnBuildBreak

在创建工作项之后作为生成中断的结果来调用。 将任务插入到此目标中,以在 BuildBreak 目标之后运行自定义任务。

GenerateDocumentation

这是一个空目标。 将任务插入到此目标中,以便在生成过程中生成文档。

重写目标以运行自定义任务

编写的任务代码必须与目标代码配对。 有关更多信息,请参见任务写入。 若要编写自定义任务,必须执行下列步骤。

  1. 编写任务代码,并通过在 TfsBuild.proj 文件中提供源代码管理路径或在生成计算机本身提供二进制文件,来确保生成的二进制文件在生成计算机上可用。

    提示

    一种比较好的编码做法是将任务代码签入源控件,但并非一定要这样做。

  2. 通过使用 UsingTask MSBuild 元素声明自定义任务在 TfsBuild.proj 文件中注册自定义任务。

    有关更多信息,请参见 UsingTask 元素 (MSBuild)

    <UsingTask 
        TaskName="MyTasks.SimpleTask" 
        AssemblyName="MyAssembly.Build.Tasks"/>
    
  3. 通过将任务插入到 TfsBuild.proj 文件中的所需目标来运行任务。

    <Target Name="BeforeGet">
        <SimpleTask />
    </Target>
    

    提示

    添加此标记会生成 XML 架构警告。 您可以放心地忽略这些警告。

  4. 在生成计算机上部署包含自定义任务的 DLL。

    重要说明重要事项

    与您自定义的 TfsBuild.proj 文件相关联的每个生成定义都会受到此更改的影响。

目标执行的顺序

目标的执行顺序取决于 CleanCompilationOutputOnly 属性的值。 如果 CleanCompilationOutputOnly 为 true,则清除目标(BeforeCleanCoreCleanAfterClean)在获取目标和标记目标(BeforeGetCoreGetAfterGetBeforeLabelCoreLabelAfterLabel)后执行。 如果 CleanCompilationOutputOnly 属性为 false,则清除目标在获取目标和标记目标前执行。 如果 CleanCompilationOutputOnly 为 true,则在 CoreClean 目标执行期间从源代码目录中仅删除中间程序集。 如果将此属性设置为 false,则在 CoreClean 目标执行期间,整个源代码目录都会被删除。

下表显示了根据 CleanCompilationOutputOnly 是 true 还是 false 执行的有序目标列表。 您可以重写的目标以粗体文本显示。

CleanCompilationOutputOnly = true

CleanCompilationOutputOnly = false

  1. InitializeBuildProperties

  2. BeforeEndToEndIteration

  3. BuildNumberOverrideTarget

  4. InitializeEndToEndIteration

  5. BeforeInitializeWorkspace

  6. CoreInitializeWorkspace

  7. AfterinitializeWorkspace

  8. InitializeBuild

  9. BeforeGet

  10. CoreGet

  11. AfterGet

  12. BeforeLabel

  13. CoreLabel

  14. AfterLabel

  15. BeforeClean

  16. CoreCleanCompilationOutput

  17. AfterClean

  18. BeforeCompile

  19. CoreCompile(适用于每个平台/配置组合形式)

  20. BeforeCompileConfiguration

  21. CoreCompileConfiguration(适用于每个要生成的解决方案)

  22. BeforeCompileSolution

  23. CoreCompileSolution

  24. AfterCompileSolution

  25. AfterCompileConfiguration

  26. AfterCompile

  27. BeforeGetChangesetsAndUpdateWorkItems

  28. CoreGetChangeSetsAndUpdateWorkItems

  29. AfterGetChangesetsAndUpdateWorkItems

  30. BeforeTest

  31. CoreTest(适用于每个平台/配置组合形式)

  32. BeforeTestConfiguration

  33. CoreTestConfiguration

  34. AfterTestConfiguration

  35. AfterTest

  36. GenerateDocumentation

  37. BeforeDropBuild

  38. CoreDropBuild

  39. AfterDropBuild

  40. AfterEndToEndIteration

  1. InitializeBuildProperties

  2. BeforeEndToEndIteration

  3. BuildNumberOverrideTarget

  4. InitializeEndToEndIteration

  5. BeforeInitializeWorkspace

  6. CoreInitializeWorkspace

  7. AfterInitializeWorkspace

  8. BeforeClean

  9. CoreClean

  10. AfterClean

  11. InitializeBuild

  12. BeforeGet

  13. CoreGet

  14. AfterGet

  15. BeforeLabel

  16. CoreLabel

  17. AfterLabel

  18. BeforeCompile

  19. CoreCompile(适用于每个平台/配置组合形式)

  20. BeforeCompileConfiguration

  21. CoreCompileConfiguration(适用于每个要生成的解决方案)

  22. BeforeCompileSolution

  23. CoreCompileSolution

  24. AfterCompileSolution

  25. AfterCompileConfiguration

  26. AfterCompile

  27. BeforeGetChangesetsAndUpdateWorkItems

  28. CoreGetChangeSetsAndUpdateWorkItems

  29. AfterGetChangesetsAndUpdateWorkItems

  30. BeforeTest

  31. CoreTest(适用于每个平台/配置组合形式)

  32. BeforeTestConfiguration

  33. CoreTestConfiguration

  34. AfterTestConfiguration

  35. AfterTest

  36. GenerateDocumentation

  37. BeforeDropBuild

  38. CoreDropBuild

  39. AfterDropBuild

  40. AfterEndToEndIteration

下面列出了在执行 CoreCompile 目标期间发生错误时所执行的目标。 您可以重写的目标以粗体文本显示。

  1. SetBuildBreakProperties

  2. BeforeOnBuildBreak

  3. GetChangesetsOnBuildBreak

  4. BeforeDropBuild

  5. CoreDropBuild

  6. AfterDropBuild

  7. BeforeCreateWorkItem

  8. CoreCreateWorkItem

  9. AfterCreateWorkItem

  10. CoreOnBuildBreak

  11. AfterOnBuildBreak

请参见

概念

了解 Team Foundation Build 配置文件

可自定义的 Team Foundation Build 属性