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 2

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;
}