自定义生成过程模板

如果你需要生成过程不仅仅能够完成默认模板可完成的任务,则可以自定义生成过程模板以执行你自己的 Windows Workflow Foundation (WWF) 指令。 你的指令可以运行在 CodeActivity 对象中实现的 .NET Framework 代码。 你可以运行内置于 Team Foundation Build (TFBuild) 中的、由第三方提供或必要时由你生成的活动。

提示

如果可在 Windows 批处理文件或 PowerShell 脚本中对自定义生成过程功能进行编码,则可以上载脚本并将其作为生成过程的一部分运行。此方法可能比创建自定义生成过程更快且更简单。请参阅在您的生成过程中运行脚本

  • 启动自定义生成过程解决方案并创建模板

  • 在生成定义中使用自定义模板

  • 获取常见问题的答案

启动自定义生成过程解决方案并创建模板

在实现你的指令之前,从 Team Foundation 服务器中提取默认模板的副本并将其添加到 Visual Basic 代码项目中。

重要

你是否正在处理 “Git”图标Git 团队项目?你是否计划上载生成过程活动二进制文件?如果是这样,那么存储二进制文件(尤其是对大文件的很多修订)会急剧增加 Git 存储库的大小。我们建议将自定义生成过程二进制文件与用来构建应用程序的代码存储在不同的存储库中。可以为生成过程创建单独的团队项目,或者也可以在现有团队项目中创建附加存储库

  1. 连接(键盘:Ctrl + 0, C)到你计划存储生成过程源的团队项目(适当时连接到 “Git”图标 Git 存储库)。

  2. 创建一个新的代码项目(键盘:Ctrl + Shift + N)。

    具体而言,创建一个包含新 Visual Basic 工作流活动库代码项目(例如,Templates)的新解决方案(例如,BuildProcessSource)。 将解决方案添加到一个受版本控制管理的新目录(位置容易让人理解)中。

    “TFVC”图标 TFVC 示例:C:\Users\YourName\Source\Workspaces\FabrikamTFVC\BuildProcessTemplates\

    “Git”图标 Git 示例:C:\Users\YourName\Source\Repos\BuildProcesses\

    创建要包含新模板的代码项目

    为何我需要代码项目来编辑我的模板?

  3. 在生成页(键盘:Ctrl + 0, B)上,创建或编辑生成定义。

    新建生成定义或编辑生成定义

  4. 下载默认模板的副本。 将新模板保存在包含你在此过程前创建的代码项目的同一文件夹中

    “TFVC”图标 TFVC 示例:C:\Users\YourName\Source\Workspaces\FabrikamTFVC\BuildProcessTemplates\BuildProcessSource\Templates

    “Git”图标 Git 示例:C:\Users\YourName\Source\Repos\BuildProcesses\BuildProcessSource\Templates

    “生成定义过程”选项卡上的“下载”链接

    “另存为”对话框

  5. 在解决方案资源管理器(键盘:Ctrl + Alt + L)中,将模板添加到 Templates 项目。

    向项目添加生成过程模板文件

    “添加现有项”对话框

    你不需要 Activity1.xaml 文件,因此如果你愿意,则可以删除它。

  6. 将模板的“生成操作”属性设置为“内容”。

    将“生成操作”设置为“内容”

  7. 将以下程序集引用添加到 Templates 代码项目:

    如何添加这些对代码项目的引用?

    保存代码项目。

  8. 实现“Hello World!”消息,以便让你在签入和运行模板后可以确保已使其正常运行。 为此,请将 WriteBuildMessage 活动拖到工作流中,并将其 BuildMessageImportance 属性设置为 Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High。

    向模板中添加了 WriteBuildMessage 活动

  9. 保存模板并上载新解决方案。 如果你在使用 “TFVC”图标 TFVC(键盘:Ctrl + 0, P),则签入挂起的更改;如果你使用 “Git”图标 Git,则提交(键盘:Ctrl + 0, G)并推送它们。

    使用 TFVC 或 Git 上载更改

在生成定义中使用自定义模板

将自定义生成过程模板上载到项目团队后(如上所述),你可以使用生成定义中的模板。

  1. 在生成页(键盘:Ctrl + 0, B)上,创建或编辑生成定义。

  2. 在生成定义**“进程”选项卡上,选择 显示详细信息“显示详细信息”,然后选择“新建”**。

    生成定义,“过程”选项卡,“新建”按钮

  3. 选择**“新建”**后:

    • TFVC:键入或浏览至 Team Foundation Server 上的模板的路径。

    • Git:键入或浏览至开发计算机上的模板的路径。

  4. 指定模板的路径后,你可以从列表中选择模板。

    在生成定义中选择的 CustomTemplate

  5. 如果要创建新生成定义,请选择要生成的解决方案并指定暂存位置和所需的任何其他选项。 请参阅创建或编辑生成定义。 完成之后,保存生成定义。

  6. 在生成页(键盘 Ctrl + 0, B)上,对生成进行排队

    将“生成”页中的生成排队

  7. 完成生成后,查看结果以验证自定义工作流是否按预期方式运行。

    “Hello World!”消息出现在生成日志中

问题解答

问:我因为没有权限而被系统阻止操作。我如何获取权限?

答:Team Foundation Server 权限参考

问:为何我需要代码项目来编辑我的模板?

**答:**你应该从代码项目中编辑模板,这是因为

  • 当你尝试在代码项目环境之外编辑模板时,可能会发生问题。

  • 除非你在生成过程模板所用的同一解决方案中开发过程活动,否则可能出现问题。 通过采用这种方式方式,当你需要在过程模板中使用某个活动时,可以从工作流设计器工具箱中使用它。 但是,你必须将活动的源代码保存在与包含生成过程模板的代码项目不同的代码项目中。 请参阅使用和开发自定义生成过程活动

问:如何添加使用 TFBuild 工作流所需的引用?

**答:**使用引用管理器添加引用以

查看代码项目引用并打开引用管理器

自定义模板代码项目引用

“引用管理器”对话框

浏览到 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\v2.0,然后选择并添加:

“选择要引用的文件”对话框

“引用管理器”对话框

问:能否跨团队项目共享模板?

**答:**可以。 可以向多个团队项目注册一个模板。 此功能意味着,你可以跨包含你的模板的团队项目集合中的任何团队项目共享生成过程。

问:如果我修改我的模板,使用该模板的生成定义会出现什么情况?

**答:**如果需要修改某个模板,应计划在完成对模板的更改后审查基于该模板的所有生成定义并进行相应更正。 如果不这样做,生成定义可能会失败或以意外方式工作。

问:如果我删除自己的生成过程模板,会发生什么?

**答:**如果你决定删除某个生成过程模板,首先确保找到并删除所有基于该模板的生成定义。 当删除该模板时,基于该模板的所有其余生成定义将不再起作用。

问:导致我的自定义生成过程出错的原因是什么?

**答:**某些错误的一些常见原因如下:

  • TF215097:如果你的自定义活动缺少一个必需的特性或者你试图在包含自定义活动的相同代码项目中编辑模板,则会出现此情况。

  • MSBuild 错误 XC1014:如果你未将模板的“生成操作”设置为“内容”,则会出现此情况。

如果你收到上述错误之一,请确保你没有漏掉上述过程中的任一步骤。

此外,你可能会发现此主题有帮助:诊断生成问题

问:什么是 Windows Workflow Foundation?如何使用它?

答: Windows Workflow Foundation

问:如何获取环境变量数据?

答:使用自定义生成过程中的环境数据

问:我可以从何处了解内置活动?

答:Team Foundation Build 活动

如果内置活动不能满足我的需求,该怎么办?

答:开发你自己的自定义生成过程活动

问:可从何处获取模板、工作流活动和脚本?

答: 社区 TFS 生成扩展

问:可从何处了解有关如何开发自定义生成过程的详细信息?

答: 策划的答案:自定义你的 Team Foundation Build 过程