Выполнение задания Quartz.NET из отдельной сборки - PullRequest
0 голосов
/ 23 марта 2012

Я пытаюсь выполнить задание 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)

Я использую версия 2 бета 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.Net, из которой запускается Quartz.Server.exe.

В файле quartz_jobs.xml задание задано с использованием файла по умолчанию, и только тип задания изменился, чтобы отразить новую сборку и класс:

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

Возможно, это связано с управлением версиями фреймворка, но Quartz.net, похоже, также использует .NET 4 (Quartz.dll зависит от сборок v4).

На SO есть еще 1020 * другой вопрос о том же типе проблемы, но на него нет четкого ответа.

Что еще нужно сделать, чтобы задание можно было загрузить и выполнить?

1 Ответ

0 голосов
/ 23 марта 2012

Решение этого оказалось немного проще, чем я думал.Это было вызвано тем, что моя сборка с тестовым заданием была скомпилирована для x86 вместо AnyCPU (или x64) и с использованием Windows 7 x64.

...