quartz.dll 中是否必须包含自定义触发器持久性委托?

Do custom trigger persistence delegates have to be included in quartz.dll?

特殊要求促使我在 quartz.net 中实现自定义触发器。 (版本 2.3.0)

我遇到的问题是注册适当的持久性委托。

现在 "Core project" 是我声明自定义触发器实现和所属的自定义持久性委托的地方。

在"Main project"中,调度程序实例的配置数据是通过配置文件提供的,我在这里添加:

<add key="quartz.jobStore.driverDelegateInitString" value="triggerPersistenceDelegateClasses=SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate, SolutionName.QuartzService.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />

(之前我也试过SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate

当我启动调度程序时,我发现尝试注册持久性委托失败:

Unhandled Exception: Quartz.SchedulerConfigException: Failure occured during job recovery. ---> Quartz.Impl.AdoJobStore.NoSuchDelegateException: Couldn't instantiate delegate: Error instantiating TriggerPersistenceDelegate of type: SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate ---> Quartz.Impl.AdoJobStore.NoSuchDelegateException: Error instantiating TriggerPersistenceDelegate of type: SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate ---> System.TypeLoadException: Could not load type 'SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate' from assembly 'Quartz, Version=2.3.0.0, Culture=neutral, PublicKeyToken=null'.

Quartz-assembly 被明确提及让我感到困惑。我是否必须编译 Quartz 源代码,包括我的自定义持久性委托以便找到它?还是我漏掉了什么?

答案显然是:没有。

就我而言,我似乎只是使用了错误的设置名称。

我换了

<add key="quartz.jobStore.driverDelegateInitString" value="triggerPersistenceDelegateClasses=SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate, SolutionName.QuartzService.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />

<add key="quartz.jobStore.driverDelegateInitString" value="triggerPersistenceDelegateTypes=SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate, SolutionName.QuartzService.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />

现在调度程序启动时不再有任何抱怨。