Quartz.net -поместить сборки (отдельные расписания) в другую папку, отличную от / bin
У меня вызов службы windows quartz.net следующим образом:
ISchedulerFactory schedFact = new StdSchedulerFactory();
sched = schedFact.GetScheduler();
sched.Start();
Мой конфигурационный файл выглядит следующим образом:
<add key="quartz.plugin.xml.fileNames" value="~/quartz/quartz_jobs.xml" />
При публикации моей службы windows я разработал следующую структуру папок:
/bin/ "Various Dlls for my windows service"
/bin/Quartz/ "Includes by schedule plugins ( Seperate classes and my Jobs file )
Проблема, с которой я сталкиваюсь, заключается в том, что quartz не находит мои сборки, пока я не скопирую их в корень /bin/.
Есть идеи, как мне сохранить все мои сборки расписания в отдельной папке?
1 ответ:
Спасибо Кареллу из Google groups.
Вот мой код, который решает этот вопрос.
AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler); private Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) { Assembly MyAssembly,objExecutingAssemblies = Assembly.GetExecutingAssembly(); AssemblyName[] arrReferencedAssmbNames = objExecutingAssemblies.GetReferencedAssemblies(); if(args.Name.Contains("Coyname.Product.Service.Scheduler")) { string assName = Parser.ParseAssemblyNameReference(args.Name); var rootDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var pluginDir = Path.Combine(rootDirectory, "Quartz"); pluginDir += string.Format("\\{0}.dll",assName);; MyAssembly = Assembly.LoadFrom(pluginDir); } else { MyAssembly = Assembly.LoadFrom(string.Empty); } return MyAssembly; }