【问题标题】:Quartz.Net Initializing ProjectQuartz.Net 初始化项目
【发布时间】:2014-02-06 18:09:27
【问题描述】:

我是 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”(托管 (v4.0.30319)):已加载“C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration。 dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 未找到配置部分 - 禁止记录输出 'HelloWorldQuartzDotNet.vshost.exe'(托管 (v4.0.30319)):已加载 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Remoting\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Remoting .dll' mscorlib.dll 中出现了“System.IO.FileNotFoundException”类型的第一次机会异常

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

【问题讨论】:

  • 同时发布了 v2.2.2,我也无法让它工作。没人吗?
  • 您是否通过 xml 或 ado-store 进行了配置?如果是xml,请发布xml。

标签: c# quartz-scheduler quartz.net


【解决方案1】:

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

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

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

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

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

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


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

Quartz.NET

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

【讨论】:

  • 文档没有涵盖这个错误。
  • 这可能是很多事情,我认为这不是 Quartz.NET 的问题,而是 VS/.NET 的问题。如果你有项目要分享,我会看看。
  • 弄清楚,我用给定问题的正确解决方案更新了答案。让我知道它是否适合你:)
【解决方案2】:

Mscorlib.dll 是一个包含 .NET 框架核心功能的类库,它通过抛出 FileNotFoundException... 清楚地让您知道它找不到 HelloWorldDotNet 程序集...

确保您的 HelloWorldDotNet 程序集构建良好。检查 Visual Studio 中的 StartUp 项目是什么,并确保它是正确的并且引用了此程序集。检查项目中的所有引用...

【讨论】:

  • 我尝试将 mscorlib 添加为引用,但收到以下消息:“无法添加对 mscorlib 的引用。此组件已被构建系统自动引用”。虽然我的目标框架为 4.5,但我也将其更改为 4.0,但仍然无法正常工作。
  • @JoãoMartins - 这与 mscorlib 无关。这与您未使用名为“HelloWorldDotNot”的解决方案部署的应用程序有关
  • @Ahmedilyas 我有所有可能的名称,称为“HelloWorldQuartzDotNet”。我不知道我还能做什么
  • @JoãoMartins - 您使用的是 NuGet 的 Quartz.NET 还是手动引用了石英程序集?我们可以提供一些示例代码吗?
  • @cvbarros 我正在使用来自 NuGet 的引用。我只是想让原始帖子中的那个简单教程起作用。有些人在教程的 cmets 部分报告了与我相同但没有人回答的错误。虽然在 cmets 部分有人谈论这个:“您的作业 dll 必须在文件夹中可用。如何获得它是您的选择。另外请注意,在作业 dll 完成后需要重新启动服务放在那里。”但我不明白他们在谈论什么工作 dll 或它应该在什么文件夹中......
【解决方案3】:

检查解决方案属性。 您是否检查了优化代码复选框? 尝试取消选中它,然后编译并运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2020-04-15
    • 2020-08-23
    • 2021-06-09
    • 2020-12-21
    • 1970-01-01
    相关资源
    最近更新 更多