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

Kentico 13自定义宏无法注册求助(v13.0.151)

Kentico 13 v13.0.151 自定义宏注册失败排查与解决

问题重现

  • 已在带[assembly: AssemblyDiscoverable]标记的独立程序集内编写宏方法类与模块配置
  • 仅将程序集添加至后台解决方案引用并重建,后台宏编辑器无法找到自定义宏,调用时报错Method 'MyTestMethod' not found
  • 前端站点最初报错,无修改情况下自行恢复,相同配置在Kentico 12 Portal方案中可正常运行

关键遗漏与修正步骤

  1. 前后台共享程序集引用
    Kentico 13要求宏逻辑在前后台共享,需将包含自定义宏的独立程序集同时添加到前台站点项目和后台管理项目的引用中,并重新构建两个项目。仅部署后台会导致后台宏解析器无法正确加载程序集。

  2. 修正宏命名空间注册方式
    原代码中使用MacroContext.GlobalResolver.SetNamedSourceData,在Kentico 13中建议改用AddNamedSource确保命名空间被正确添加,而非覆盖已存在的源数据:

    protected override void OnInit()
    {
        base.OnInit();
        // 替换SetNamedSourceData为AddNamedSource
        MacroContext.GlobalResolver.AddNamedSource("SOS", SOSMacroNamespace.Instance);
    }
    
  3. 确保扩展注册标记生效
    取消注释[assembly: RegisterExtension]标记,明确将宏方法类关联到命名空间,这是Kentico 13自动发现宏的关键步骤:

    [assembly: RegisterExtension(typeof(SOSMacroMethods), typeof(SOSMacroNamespace))]
    public class SOSMacroMethods : MacroMethodContainer
    {
        [MacroMethod(typeof(string), "test method", 0)]
        public static object MyTestMethod(EvaluationContext context, params object[] parameters)
        {
            return "yayyy registered";
        }
    }
    
  4. 清理Kentico后台缓存
    后台宏编辑器依赖缓存,完成上述修改后需:

    • 登录后台,进入系统 > 系统维护 > 缓存
    • 点击清除全部缓存,包括宏缓存
    • 重启前后台应用池

修正后完整代码示例

宏方法类

[assembly: AssemblyDiscoverable]
[assembly: RegisterExtension(typeof(SOSMacroMethods), typeof(SOSMacroNamespace))]

public class SOSMacroMethods : MacroMethodContainer
{
    [MacroMethod(typeof(string), "test method", 0)]
    public static object MyTestMethod(EvaluationContext context, params object[] parameters)
    {
        return "yayyy registered";
    }
}

模块与命名空间类

[assembly: RegisterModule(typeof(SOSMacroModule))]

public class SOSMacroModule : Module
{
    public SOSMacroModule()
        : base("SOSMacros")
    {
    }

    protected override void OnInit()
    {
        base.OnInit();
        MacroContext.GlobalResolver.AddNamedSource("SOS", SOSMacroNamespace.Instance);
    }
}

[Extension(typeof(SOSMacroMethods))]
public class SOSMacroNamespace : MacroNamespace<SOSMacroNamespace>
{
}

补充说明

  • 前端自行恢复可能是因为站点重启时重新加载了程序集,但后台缓存未同步更新,导致后台宏编辑器仍无法识别
  • 确保独立程序集的目标框架与Kentico 13项目一致(建议.NET Framework 4.8)
  • 可通过调试断点验证SOSMacroModule的OnInit方法是否在前后台都被执行,确认模块初始化正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:02:43