从单独的程序集执行Quartz.NET作业

时间:2012-03-23 14:07:19

标签: assemblies quartz.net

我正在尝试从单独的程序集执行Quartz.net作业。该类继承自IJob接口,实现了Execute方法,并且已经被复制到与Quartz.Server.exe相同的文件夹中,但是我收到以下错误:

Error scheduling jobs: Could not load file or assembly 'TestJobs' or one of its dependencies. An attempt was made to load a p rogram with an incorrect format. System.BadImageFormatException: Could not load file or assembly 'TestJobs' or on e of its dependencies. An attempt was made to load a program with an incorrect format. File name: 'TestJobs' at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, Bool ean loadTypeFromPartialName, ObjectHandleOnStack type) ... (snipped)

我正在使用version 2 beta 2。服务器应用程序已解压缩到一个单独的文件夹中,并通过在命令行运行Quartz.Server.exe来执行。

我的示例作业是一个名为TestsJobs的独立程序集,其中有一个非常基本的工作要写入文本文件:

public class TestJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        try
        {
            string path = @"c:\test.txt";
            while (true)
            {
                var line = DateTime.Now.ToString() + " - " + Guid.NewGuid();
                File.AppendAllText(path, line);
                Thread.Sleep(500);
            }
            catch (Exception ex)
            {
                throw new JobExecutionException("Error", ex, false);
            }
        }
    }
}

这是一个针对.NET 4的基本类库项目。它被复制到运行Quartz.Server.exe的Quartz.Net服务器文件夹中。

quartz_jobs.xml文件使用默认文件设置作业,只更改了作业类型以反映新的程序集和类:

<job-type>TestJobs.TestJob, TestJobs</job-type>

认为这可能与框架版本控制有关,但Quartz.net似乎也在使用.NET 4(Quartz.dll依赖于v4程序集)。

关于同一类型的问题有another question on SO,但它没有明确的答案。

我还需要做什么才能加载和执行作业吗?

1 个答案:

答案 0 :(得分:0)

对此的解决方案结果比我想象的要简单一些。它是由我的程序集导致测试作业编译为x86而不是AnyCPU(或x64)并使用Windows 7 x64。