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

时间:2016-06-15 17:59:46

标签: c# quartz-scheduler quartz.net

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

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

  • 主项目,它引用所需的Quartz.dll并启动调度程序的实例
  • 核心项目由“主项目”引用,并将该项目扩展到其他项目可以访问的功能中

现在,“核心项目”是我声明自定义触发器实现和归属自定义持久性委托的地方。

在“主项目”中,通过配置文件提供了调度程序实例的配置数据,这里我添加了:

<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 - 集会让我感到困惑。我是否必须编译Quartz源代码,包括我的自定义持久委托,以便找到它?或者我错过了其他什么?

1 个答案:

答案 0 :(得分:0)

答案很明显:不。

在我的情况下,我似乎只使用了错误的设置名称。

我替换了

hide.bs.collapse

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

现在没有更多来自调度程序启动的投诉。