У меня есть Quartz, работающий в консольном приложении (хотя я воспроизвел поведение в приложении ASP.NET), разговаривая с удаленным Quartz Server (обычный config-клиент имеет потоки, установленные на 0, удаленный сервер, прослушивающий порт 555 и т. д.). Проблема, которую я испытываю, такая же, как здесь Could not load job assembly error in Quartz.NET и здесь Quartz.Net Initializing Project. В частности, при вызове клиента к IScheduler.ScheduleJob(), я получаю ошибку:Планировщик Quartz.NET - Получение ошибки «Не удалось загрузить файл или сборку« SimpleJob ... »при отправке задания на удаленный сервер
Could not load file or assembly 'SimpleJob.dll, Version...The located assembly's manifest definition does not match the assembly reference'
Как вы можете видеть в этих двух ссылок StackOverflow выше, проблема заключается в том, что сервер Кварц не знает о IJob классы и решение по ссылке (котировка со второй ссылки): «... копировать/вставлять [сборку/исполняемый файл приложения клиент/консоль] в служебную папку Quart.NET ... Когда вы это сделаете, это будет load [независимо от конкретного класса IJob] ... Рекомендуемое решение: создать отдельную DLL для каждого из ваших [классов заданий] ... и ... »(теперь моя формулировка) ссылаются на эти сборки из проекта сервера ,
Я сделал это и не имел радости. В частности, первая ошибка, которую я получил, заключалась в том, что сборка моего файла задания не найдена. В этот момент я скопировал сборку моего клиента (.exe) в папку bin для сервера и добавил ссылку на эту сборку - не повезло. Затем я разбил класс своей работы на отдельную сборку и скопировал эту .dll в каталог bin для сервера и добавил ссылку на эту сборку - не повезло. Наконец, я скопировал файл фактического класса моей работы (.cs) и включил его в проект сервера сервера, а затем добавил ссылку - не повезло.
Позвольте пояснить, что означает «не повезло». После того, как я добавил класс работу сборку проекта сервера я все еще получил „ошибку Не удалось загрузить файл или сборку ...“, но теперь это было:
Could not load file or assembly 'Quartz.dll, Version...The located assembly's manifest definition does not match the assembly reference'
На данный момент ошибка жалуясь о Quartz.dll, который не имеет для меня никакого смысла, потому что эта DLL (и по определению) упоминается как в проектах клиента, так и на сервере и находится в их соответствующих папках bin.
Следующим шагом я должен был запустить Process Monitor и поймать, где сбои в сборе сбоя. Никакой радости - искал SimpleJob.dll и Quartz.dll и видел успехи в обоих случаях. (В ретроспективе я не считаю, что мониторинг файлов имеет значение здесь, потому что с точки зрения файловой системы конкретная DLL считывается, но сборка не загружается .net. Process Monitor этого не увидит.)
И наконец, я enabled assembly binding failure logging, прошел через результирующие журналы и не смог идентифицировать сбои.
Предложения приветствуются ...
У вас есть файл Quartz.dll на сервере и существует ли он такой же DLL-файл на клиентской стороне? –
@MarkoLahma - я удалил свой предыдущий комментарий - оказалось, что я сделал * не *, имеет ту же версию с обеих сторон. Ну, по крайней мере, я не сделал это после того, как перекомпилировал оба проекта, которые ... Это было сделано. Теперь проблема тоже имеет смысл. Я думаю, что полный ответ - это комбинация того, что вы написали, и того, что Джей написал ниже. Если один из вас, ребята, объединяет их в ответ, я помечаю принятый. Еще раз спасибо. – Howiecamp