【问题标题】:Team Build workflow can't load my custom activityTeam Build 工作流无法加载我的自定义活动
【发布时间】:2016-12-30 02:26:24
【问题描述】:

我一直在寻找替代品好几个小时,但我发现了一些非常奇怪的事情。

因此,为了隔离我的问题,我创建了一个非常简单的代码活动,该活动位于我的 xaml 模板中:

using System.Activities;
using Microsoft.TeamFoundation.Build.Client;
using Microsoft.TeamFoundation.Build.Workflow.Activities;

namespace Weco.TeamBuild.FirmwareActivityPack
{
    [BuildActivity(HostEnvironmentOption.Controller)]
    public sealed class TestActivity: CodeActivity<string>
    {
        protected override string Execute(CodeActivityContext context)
        {
            context.TrackBuildMessage("Inside TestActivity", BuildMessageImportance.High);
            return "success";
        }
    }
}

当我尝试在“在代理上运行”序列中运行此活动时,我收到了传统错误:

Cannot create unknown type '{clr-namespace:Weco.TeamBuild.FirmwareActivityPack;assembly=FirmwareActivityPack}TestActivity'.

我确实在源代码管理中检查了 TestActivity 所在的程序集,并且我的构建控制器按照在线几篇文章中的建议指向它。

有趣的是,当我将该活动的副本放在模板的最顶部时,它运行良好(但只有第一个 TestActivity)。看起来“自定义程序集的版本控制路径”仅对构建控制器有效,对代理无效。我试图避免在我的构建服务器的 GAC 中安装/卸载任何东西。

仅供参考,TFS 安装在 machine_1 上,Team Build(控制器 + 4 个代理)安装在 machine_2 上

【问题讨论】:

    标签: tfsbuild custom-activity


    【解决方案1】:

    自己找到了答案。

    问题是构建失败时显示的错误消息过于笼统。我从构建控制器属性中清除了自定义程序集路径,并将程序集安装在构建机器的 GAC 上。

    构建仍然失败,但现在显示不同的消息:

    “构建过程验证失败。详细信息:验证错误:活动“1:DynamicActivity”的私有实现有以下验证错误:TF28001:活动“TestActivity”不能在 AgentScope 的上下文中使用."

    现在搜索答案很容易,解决方案是更改自定义活动的类属性,如下所示:

     [BuildActivity(HostEnvironmentOption.Agent)]
     public sealed class UpdateFirmwareVersionBeforeCompiling : CodeActivity<string>
    

    这就是诀窍

    【讨论】:

    • 感谢您提供有关 GAC 的提示。我也遇到了 TFS 报告的错误“无法找到程序集...”,我已经为此苦恼了半天,直到我将自定义程序集添加到 GAC,结果发现实际错误是完全不同的类型,与 TFVC 中的锁定文件有关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多