1

几个小时以来,我一直在寻找替代品,但我遇到了一些非常奇怪的事情。

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

4

1 回答 1

3

自己找到了答案。

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

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

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

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

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

这就是诀窍

于 2011-09-21T02:06:42.580 回答