You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Botframework Composer迁移2.x后Custom Action未在工厂注册报错

问题根因

该报错明确指向Bot Framework的声明式类型工厂无法识别你定义的Mycustomaction类型,核心原因是Composer 1.x到2.x做了架构调整:1.x支持自动扫描项目内的自定义Action实现自动注册,2.x废弃了该逻辑,改为基于Bot Components的显式注册机制,所以原有1.x的自定义Action配置全部失效。

解决步骤
  • 第一步:校验自定义Action的代码规范
    确保你的自定义Action类符合2.x的声明要求:

    • 必须继承自Microsoft.Bot.Builder.Dialogs.Dialog基类
    • 类上方必须添加[DeclarativeType]特性,且特性内声明的类型名称和你报错的Mycustomaction完全一致(大小写敏感):
    // 注意TypeName参数要和dialog文件里的$kind完全匹配
    [Microsoft.Bot.Builder.Dialogs.Declarative.DeclarativeType("Mycustomaction")]
    public class Mycustomaction : Dialog
    {
        // 原有业务逻辑无需调整
    }
    
    • 校验所有Bot Framework相关NuGet包版本统一,Microsoft.Bot.Builder.Dialogs.Declarative包版本必须≥4.15.0,和项目内其他Bot相关包版本完全一致,避免版本冲突。如果是单独类库封装的自定义Action,要确保主机器人项目已经引用该类库,且类库的「复制到本地」属性为开启状态。
  • 第二步:显式注册声明式类型
    找到机器人项目的启动文件(.NET 6及以上找Program.cs,旧版本找Startup.cs),在注入Bot运行时的逻辑段添加自定义类型注册:

    // 原有注入Bot运行时的代码
    services.AddBotRuntime(Configuration)
        // 新增行,注册自定义Action所在的组件,也可以直接注册单个类型
        .RegisterDeclarativeTypes<Mycustomaction>();
    

    如果自定义Action数量较多,建议单独声明组件注册类统一管理:

    public class CustomActionComponent : IComponentDeclarativeTypes
    {
        public IEnumerable<DeclarativeType> GetDeclarativeTypes(ResourceExplorer resourceExplorer)
        {
            // 所有自定义Action都在这里统一注册
            yield return new DeclarativeType<Mycustomaction>("Mycustomaction");
            yield return new DeclarativeType<OtherCustomAction>("OtherCustomAction");
        }
    
        public IEnumerable<JsonConverter> GetConverters(ResourceExplorer resourceExplorer, ISourceResolver sourceResolver)
        {
            // 无自定义Json转换器直接返回空即可
            return Enumerable.Empty<JsonConverter>();
        }
    }
    

    注册时直接添加整个组件即可:

    services.AddBotRuntime(Configuration)
        .AddComponent<CustomActionComponent>();
    
  • 第三步:校验Dialog文件配置
    打开用到该自定义Action的.dialog文件,找到$kind字段,确保它的取值和你DeclarativeType里声明的名称完全一致,没有拼写、大小写错误。

  • 第四步:清理缓存重启
    删除项目根目录下的bin、obj文件夹,关闭Composer后删除本地缓存目录:

    • Windows:%AppData%\BotFrameworkComposer\cache
    • Mac/Linux:~/.config/BotFrameworkComposer/cache
      重新编译项目后启动机器人即可生效。

内容的提问来源于stack exchange,提问作者foobarbaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:36:00