我正在尝试从单独的程序集执行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,但它没有明确的答案。
我还需要做什么才能加载和执行作业吗?
答案 0 :(得分:0)
对此的解决方案结果比我想象的要简单一些。它是由我的程序集导致测试作业编译为x86而不是AnyCPU(或x64)并使用Windows 7 x64。