Team Build工作流无法加载我的自定义活动

时间:2011-09-21 01:46:11

标签: tfs2010 tfsbuild custom-activity

我一直在寻找几个小时的替代品,而且我有一些非常奇怪的事情。

因此,为了隔离我的问题,我在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";
        }
    }
}

当我尝试在“Run on Agent”序列中运行此活动时,我遇到了传统错误:

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

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

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

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

1 个答案:

答案 0 :(得分:3)

自己找到答案。

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

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

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

现在搜索答案很简单,解决方法是更改​​自定义活动的class属性,如下所示:

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

这就是诀窍