You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ASP.NET Core Program.cs中配置Quartz触发器遇CS1061错误

解决ASP.NET Core中IWebHostBuilder无Services定义的错误

错误原因

IWebHostBuilder接口本身并不包含Services属性,直接通过webBuilder.Services访问服务容器是错误的用法。正确的服务配置方式是通过ConfigureServices方法实现,或是在Host层级进行配置。

修复方案1:在Host层级配置Quartz服务

将Quartz服务配置逻辑移到ConfigureWebHostDefaults外部,直接在HostBuilder上调用ConfigureServices方法:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureServices(services =>
        {
            services.AddQuartz(q =>
            {
                q.UseMicrosoftDependencyInjectionScopedJobFactory();
                var jobKey = new JobKey("TestTask");
                q.AddJob<Orange38_Application.Scheduled_Tasks.TestTask>(opts => opts.WithIdentity(jobKey));

                q.AddTrigger(opts => opts
                    .ForJob(jobKey)
                    .WithIdentity("TestTask-trigger")
                    .WithCronSchedule("0 0/1 0 ? * * *")
                );
            });

            services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            // webBuilder.UseStartup<Startup>();
        });

修复方案2:在WebHostBuilder内使用ConfigureServices方法

如果需要在ConfigureWebHostDefaults内部配置服务,需调用webBuilder.ConfigureServices方法包裹服务注册逻辑:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            // webBuilder.UseStartup<Startup>();

            webBuilder.ConfigureServices(services =>
            {
                services.AddQuartz(q =>
                {
                    q.UseMicrosoftDependencyInjectionScopedJobFactory();
                    var jobKey = new JobKey("TestTask");
                    q.AddJob<Orange38_Application.Scheduled_Tasks.TestTask>(opts => opts.WithIdentity(jobKey));

                    q.AddTrigger(opts => opts
                        .ForJob(jobKey)
                        .WithIdentity("TestTask-trigger")
                        .WithCronSchedule("0 0/1 0 ? * * *")
                    );
                });

                services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);
            });
        });

额外注意事项

  • 确认已安装必要的NuGet包:Quartz和Quartz.Extensions.Hosting
  • 若使用ASP.NET Core 6+的极简模式(无Startup.cs),推荐使用第一种Host层级配置方式,更贴合当前框架的设计规范

内容的提问来源于stack exchange,提问作者VDS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 00:40:02