2

次のように、quartz.net を呼び出す Windows サービスがあります。

  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 )

私が抱えている問題は、アセンブリを /bin/ のルートにコピーしない限り、クォーツがアセンブリを見つけられないことです。

すべてのスケジュール アセンブリを別のフォルダに保存する方法はありますか?

4

1 に答える 1

2

Google グループの Karell に感謝します。

この質問に対処する私のコードを次に示します。

   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;
}
于 2012-07-09T21:05:00.130 に答える