c# - Quartz.Net 初始化项目

标签 c# quartz-scheduler quartz.net

我是 Quartz.Net 的新手,我一直在关注 this做我的第一份工作的教程。 我按照每一步从零开始 3 次,但我无法让它工作。 当我在 Visual Studio 上运行该项目时,我从 cmd 收到此消息:

Failed: Could not load file or assembly: 'HelloWorldDotNet, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

在 Visual Studio 输出中我得到:

'HelloWorldQuartzDotNet.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. no configuration section found - suppressing logging output 'HelloWorldQuartzDotNet.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Remoting\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Remoting.dll' A first chance exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll

我不明白那个 mscorlib.dll 是什么...我试图搜索它,但找不到任何地方。 我在 Windows 8 上使用最新版本的 Quartz.Net 2.2.1。

最佳答案

在下载项目并按照分步教程进行操作后,在调试器中花费了一段时间后,我发现它存在问题。所以教程将从客户端的角度指导您使用 Quartz.NET,并且没有任何问题。代码构建良好,一切都像魅力一样。问题出在项目的服务器端,您收到的错误是从运行 Quartz.NET 服务器实现的服务发送的。抛出异常的行是:

// Line 40 | ScheduleJob.cs
var schedule = schd.ScheduleJob(job, trigger);

这里发生的事情是,调度程序被告知名为 WriteHelloToConsole 的新作业,用于实现 IJob 接口(interface)的 HelloWorldJob 类。服务器收到此信息后,他会尝试在他的应用程序域中找到该 dll(问题来了)。但是,Quartz.NET 服务器域(文件夹)中没有 HelloWorldJob,因为您是直接从 SourceForge 服务器下载的。这就是为什么您得到无法加载文件或程序集的原因。

解决方案 很简单,但不推荐,但对于本教程来说已经足够了。您只需将 HelloWorldQuartzDotNet.exe 复制/粘贴到 Quart.NET 服务文件夹中,然后从 Windows 服务 启动/停止服务。执行此操作后,它将在 Quartz.NET 服务器应用程序域中加载 HelloWorldJob 类(以及来自 HelloWorldQuartzDotNet.exe 的其他类)。

推荐解决方案 用于其他项目,特别是用于生产。为您的每个创建单独的 DLL,因此一个 DLL 用于 IJob 类,一个单独的 DLL 用于 Quartz.NET。添加对客户端的引用并将 DLL 复制/粘贴到服务。这样,您将解耦所有内容,并获得可维护的解决方案。

如果您需要更多关于 .NET 应用程序域如何工作的信息,您可以从这个 link 获得它.


注意: 开始/学习/使用 Quartz .NET 的最佳方式是阅读他们的文档。有一个方便的教程,介绍如何设置从小型控制台应用程序到 Windows 服务的所有内容。我已经实现了几次,只使用文档。

Quartz.NET

我愿意为任何特定问题提供帮助。

关于c# - Quartz.Net 初始化项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21610680/

相关文章:

c# - Quartz.NET - 计划任务停止随机运行

c# - 无法在 Quartz.NET 中使用 AdoJobStore

c# - 如何从不同的主机连接到我的 SignalR 集线器?

c# - 滚动条样式

c# - 如何创建共享代码项目 (.shproj)

quartz-scheduler - Quartz - 如何关闭和重新启动调度程序?

grails - 禁用特定服务器的 quartz 作业

java - 当前作业完成后关闭 Quartz 调度程序

c# - 使用Quartz.NET监控Mysql表并执行一些东西

c# - Web 服务集用户许可证 Office 365