团队构建工作流无法加载我的自定义活动



我已经找了几个小时的替代方案了,我发现了一些非常奇怪的事情。

因此,为了隔离我的问题,我创建了一个非常简单的代码活动,进入我的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上

我自己找到了答案。

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

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

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

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

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

那就行了

最新更新