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 |
这是一个空目标。 将任务插入到此目标中,以便在生成过程中生成文档。 |
重写目标以运行自定义任务
编写的任务代码必须与目标代码配对。 有关更多信息,请参见任务写入。 若要编写自定义任务,必须执行下列步骤。
编写任务代码,并通过在 TfsBuild.proj 文件中提供源代码管理路径或在生成计算机本身提供二进制文件,来确保生成的二进制文件在生成计算机上可用。
提示
一种比较好的编码做法是将任务代码签入源控件,但并非一定要这样做。
通过使用 UsingTask MSBuild 元素声明自定义任务在 TfsBuild.proj 文件中注册自定义任务。
有关更多信息,请参见 UsingTask 元素 (MSBuild)。
<UsingTask TaskName="MyTasks.SimpleTask" AssemblyName="MyAssembly.Build.Tasks"/>
通过将任务插入到 TfsBuild.proj 文件中的所需目标来运行任务。
<Target Name="BeforeGet"> <SimpleTask /> </Target>
提示
添加此标记会生成 XML 架构警告。 您可以放心地忽略这些警告。
在生成计算机上部署包含自定义任务的 DLL。
重要事项
与您自定义的 TfsBuild.proj 文件相关联的每个生成定义都会受到此更改的影响。
目标执行的顺序
目标的执行顺序取决于 CleanCompilationOutputOnly 属性的值。 如果 CleanCompilationOutputOnly 为 true,则清除目标(BeforeClean、CoreClean 和 AfterClean)在获取目标和标记目标(BeforeGet、CoreGet、AfterGet、BeforeLabel、CoreLabel 和 AfterLabel)后执行。 如果 CleanCompilationOutputOnly 属性为 false,则清除目标在获取目标和标记目标前执行。 如果 CleanCompilationOutputOnly 为 true,则在 CoreClean 目标执行期间从源代码目录中仅删除中间程序集。 如果将此属性设置为 false,则在 CoreClean 目标执行期间,整个源代码目录都会被删除。
下表显示了根据 CleanCompilationOutputOnly 是 true 还是 false 执行的有序目标列表。 您可以重写的目标以粗体文本显示。
CleanCompilationOutputOnly = true |
CleanCompilationOutputOnly = false |
---|---|
|
|
下面列出了在执行 CoreCompile 目标期间发生错误时所执行的目标。 您可以重写的目标以粗体文本显示。
SetBuildBreakProperties
BeforeOnBuildBreak
GetChangesetsOnBuildBreak
BeforeDropBuild
CoreDropBuild
AfterDropBuild
BeforeCreateWorkItem
CoreCreateWorkItem
AfterCreateWorkItem
CoreOnBuildBreak
AfterOnBuildBreak