ASP.NET Core 2.0用Quartz 3.0.4报错:IServiceCollection无AddQuartz定义
解决ASP.NET Core 2.0中Quartz 3.0.4的AddQuartz/UseQuartz找不到的问题
我之前也碰到过一模一样的情况——Quartz 3.x本身并没有直接提供IServiceCollection.AddQuartz()和IApplicationBuilder.UseQuartz()这些便捷扩展方法,你得安装Quartz官方推出的DI集成和ASP.NET Core适配包才能使用这些语法。
下面是具体的解决步骤:
安装配套的NuGet包:
除了你已经安装的Quartz 3.0.4,还需要额外安装两个包,注意版本要和Quartz 3.0.4保持一致(比如都选3.0.4版本):Quartz.Extensions.DependencyInjection:负责提供AddQuartz扩展,把Quartz服务注册到DI容器里Quartz.AspNetCore:负责提供UseQuartz扩展,让Quartz调度器能在ASP.NET Core的管道里正常启动
引入正确的命名空间:
在Startup.cs的顶部添加这几个命名空间:using Quartz; using Quartz.Extensions.DependencyInjection; using Quartz.AspNetCore;调整Startup.cs的配置代码:
在ConfigureServices方法里,你可以这样配置Quartz:public void ConfigureServices(IServiceCollection services) { // 注册并配置Quartz服务 services.AddQuartz(options => { // 这里可以自定义调度器配置,比如设置名称 options.SchedulerName = "MyProjectScheduler"; // 示例:添加一个定时任务和触发器 var demoJobKey = new JobKey("DemoTimedJob"); options.AddJob<DemoTimedJob>(demoJobKey); options.AddTrigger(trigger => trigger.ForJob(demoJobKey) .WithSimpleSchedule(schedule => schedule.WithIntervalInMinutes(5) .RepeatForever())); }); // 将Quartz托管为ASP.NET Core的后台服务 services.AddQuartzServer(options => { // 应用关闭时等待正在执行的任务完成 options.WaitForJobsToComplete = true; }); // 你的其他服务注册代码... services.AddMvc(); }在
Configure方法中,根据版本情况决定是否保留app.UseQuartz():(Quartz.AspNetCore 3.x版本中,AddQuartzServer已经会自动启动调度器,可能不需要显式调用,但如果你的版本仍有要求,可以添加)public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // 启动Quartz调度器(按需添加) app.UseQuartz(); app.UseMvc(); }验证修复效果:
重新生成项目,Visual Studio的错误提示应该就会消失了。如果还有问题,检查下NuGet包的版本是否完全匹配,以及命名空间有没有漏加。
内容的提问来源于stack exchange,提问作者Sektor
相关产品推荐
相关产品推荐

