使用和开发自定义生成过程活动

来自 C Sharp 活动的“Hello World”

创建自定义生成过程模板后,可以使用 Windows Workflow 指令和内置 Team Foundation Build (TFBuild) 活动实现你自己的业务逻辑。 如果这些工具还不够,你可以使用第三方提供的活动,或者在必要时在 CodeActivity 中实现你自己的 .NET Framework 代码。

提示

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

  • 创建自定义生成过程活动

  • 编辑生成过程模板

  • 上载自定义生成过程

    • “TFVC”图标 在 TFVC 团队项目中上载并启用自定义生成过程

    • “Git”图标 在 Git 团队项目中上载并启用自定义生成过程

  • 启用自定义生成过程

  • 运行生成

  • 问题解答

生成摘要中的“Hello World”

创建自定义生成过程活动

重要

在开始之前,请获取模板的副本并将其放在代码项目中。如果你尚未这样做,此处展示了操作方法

你应该在生成过程模板所用的同一解决方案中开发生成过程活动。通过采用这种方式方式,当你需要在过程模板中使用某个活动时,可以从工作流设计器工具箱中使用它。但是,你必须将活动的源代码保存在与包含生成过程模板的代码项目不同的代码项目中。

  1. 将新的 C# 或 Visual Basic 代码项目添加到包含你的生成过程模板代码项目的解决方案。

    BuildProcessSource 解决方案的新项目

    新建项目

  2. 将以下引用添加到新的代码项目:

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

    保存代码项目。

  3. 将新活动添加到该项目。

    源代码项目的新项

    添加新项

  4. 实现你的 CodeActivity,例如 Hello.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Activities;
    using Microsoft.TeamFoundation.Build.Workflow.Activities;
    using Microsoft.TeamFoundation.Build.Client;
    using Microsoft.TeamFoundation.Build.Workflow.Tracking;
    
    namespace BuildProcessSource
    {
        // enable the build process template to load the activity
        [BuildActivity(HostEnvironmentOption.All)]
        // keep the internal activity operations from appearing in the log
        [ActivityTracking(ActivityTrackingOption.ActivityOnly)]
        public sealed class Hello : CodeActivity
        {
            // Define an activity input argument of type string
            public InArgument<string> SayHelloTo { get; set; }
    
            // If your activity returns a value, derive from CodeActivity<TResult>
            // and return the value from the Execute method.
            protected override void Execute(CodeActivityContext context)
            {
                // Obtain the runtime value of the Text input argument
                string text = context.GetValue(this.SayHelloTo);
    
                // Add our default value if we did not get one
                if (text == null || text == "")
                {
                    text = "World";
                }
    
                // Write the message to the log
                context.TrackBuildWarning("Hello " + text, BuildMessageImportance.High);
            }
        }
    }
    

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

  5. 在 Visual Studio 中生成解决方案(键盘:Ctrl + Shift + B)。

完成后,你的解决方案应类似于:

自定义生成过程解决方案的示例

编辑生成过程模板

在解决方案中,通过将活动拖动到生成过程模板来编辑该模板。 将活动添加到模板后,设置其属性(键盘:F4)。

编辑解决方案中的生成过程模板

完成编辑后,保存该模板。

上载自定义生成过程

在可定义使用自定义生成过程模板和活动的生成之前,必须将其上载并启用。

  • “TFVC”图标 在 TFVC 团队项目中上载并启用自定义生成过程

  • “Git”图标 在 Git 团队项目中上载并启用自定义生成过程

在 TFVC 团队项目中上载自定义生成过程

“TFVC”图标 TFVC 团队项目中:

  1. 确保已生成解决方案(键盘 Ctrl + Shift + B)。

  2. 连接(键盘:Ctrl + 0, C)到你计划存储生成过程源的团队项目。

  3. 源代码管理资源管理器中,将项添加到包含活动代码项目的文件夹。

    源代码管理资源管理器

  4. 浏览到包含 .dll 文件的文件夹并选择它。 例如,C:\Users\YourName\Source\Workspaces\FabrikamTFVC\BuildProcessTemplates\BuildProcessSource\Source\bin\Debug。

    将生成过程二进制文件添加到 TFVC 版本控制中

  5. 完成添加文件的过程。

    将生成过程二进制文件添加到 TFVC 版本控制中

  6. 签入更改。

    挂起的更改

在 Git 团队项目中上载自定义生成过程

“Git”图标 Git 团队项目中:

  1. 重要提示:

    • 存储二进制文件(尤其是对大文件的很多修订)会急剧增加 Git 存储库的大小。 我们建议将自定义生成过程二进制文件与用来构建应用程序的代码存储在不同的存储库中。 可以出于此目的创建单独的团队项目,或者也可以在现有团队项目中创建附加存储库

    • 必须将二进制文件存储在 Git 储存库的子文件夹中。 如果你尝试使用根文件夹中的二进制文件,则可能被 git branch not found 错误消息阻止。

  2. 确保已生成解决方案(键盘 Ctrl + Shift + B)。

  3. 连接(键盘:Ctrl + 0, C)到你计划存储生成过程源的团队项目。

  4. 打开 Git 命令提示符。

    “更改”页中的“打开命令提示符”

    问:我无法打开命令提示符。我该怎么办?答:启用 Git 命令提示符

  5. 使用 Git 命令提示符添加 .dll 文件。 例如:

    cd c:\users\YourName\source\repos\BuildProcesses\BuildProcessSource\Source\bin\Debug
    
    git add Source.dll -f
    
  6. 提交更改。

    “更改”页上的“提交”按钮

  7. 同步或推送提交。

    “更改”页上的“同步”链接

    “未同步提交”页上的“同步”按钮和“推送”链接

启用自定义生成过程

必须将生成控制器指向你上载到 TFS 的二进制文件并选择生成定义中的生成过程模板,然后才能运行自定义生成过程。

  1. 在“生成”页(键盘:Ctrl + 0, B)上,选择**“操作”,然后选择“管理生成控制器”**。

  2. 在“管理生成控制器”对话框中,突出显示将用于运行此生成过程的控制器,然后选择**“属性”**。

    “管理生成控制器”对话框

  3. 指定自定义程序集的版本控制路径。

    “生成控制器属性”对话框

    VisualStudioEllipsesButton 屏幕快照 浏览到作为你在前面的步骤中上载生成过程的文件夹的上级的文件夹。

    • “TFVC”图标 TFVC 示例:$/FabrikamTFVC/BuildProcessTemplates/BuildProcessSource/Source/bin/Debug

    • “Git”图标 Git 示例:BuildProcessSource/Source/Bin/Debug

      显示 Git 值的“浏览”对话框

      系统会自动将你输入的值转换为 vstfs 路径。 例如:vstfs:///Git/VersionedItem/FabrikamGit/BuildProcesses/master/BuildProcessSource/Source/Bin/Debug。

      自定义程序集的版本控制路径

  4. 如果你尚未这样做,请创建或修改生成定义并选择自定义生成过程模板

    使用自定义过程模板的生成定义

运行生成

对生成进行排队结果应类似于:

生成摘要中的“Hello World”

问题解答

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

答:Team Foundation Server 权限参考

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

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

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

引用上下文菜单

“引用管理器”对话框

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

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

“引用管理器”对话框

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

答:错误的一些常见原因

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

答: Windows Workflow Foundation

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

答:Team Foundation Build 活动

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

答: 社区 TFS 生成扩展

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

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