我一直在寻找几个小时的替代品,而且我有一些非常奇怪的事情。
因此,为了隔离我的问题,我在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上
答案 0 :(得分:3)
自己找到答案。
问题是构建失败时显示的错误消息过于通用。我从构建控制器属性中清除了自定义程序集路径,并在构建计算机的GAC上安装了程序集。
构建仍然失败,但现在有了不同的消息:
“构建过程验证失败。详细信息:验证错误:活动'1:DynamicActivity'的私有实现具有以下验证错误:TF28001:活动'TestActivity'不能在AgentScope的上下文中使用。“
现在搜索答案很简单,解决方法是更改自定义活动的class属性,如下所示:
[BuildActivity(HostEnvironmentOption.Agent)]
public sealed class UpdateFirmwareVersionBeforeCompiling : CodeActivity<string>
这就是诀窍