Skip to content

Bump the minor-and-patch group with 19 updates#317

Open
dependabot[bot] wants to merge 1 commit intomainfrom
dependabot/nuget/dot-config/minor-and-patch-20a1735c52
Open

Bump the minor-and-patch group with 19 updates#317
dependabot[bot] wants to merge 1 commit intomainfrom
dependabot/nuget/dot-config/minor-and-patch-20a1735c52

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot Bot commented on behalf of github May 4, 2026

Updated dotnet-ef from 8.0.19 to 8.0.26.

Release notes

Sourced from dotnet-ef's releases.

8.0.26

Release

What's Changed

Full Changelog: dotnet/efcore@v8.0.25...v8.0.26

8.0.25

Release

What's Changed

Full Changelog: dotnet/efcore@v8.0.24...v8.0.25

8.0.24

Release

What's Changed

Full Changelog: dotnet/efcore@v8.0.23...v8.0.24

8.0.23

Release

What's Changed

Full Changelog: dotnet/efcore@v8.0.22...v8.0.23

8.0.22

Release

What's Changed

Full Changelog: dotnet/efcore@v8.0.21...v8.0.22

8.0.21

Release

What's Changed

Full Changelog: dotnet/efcore@v8.0.20...v8.0.21

8.0.20

Release

What's Changed

Full Changelog: dotnet/efcore@v8.0.19...v8.0.20

Commits viewable in compare view.

Updated FluentAssertions from 8.8.0 to 8.9.0.

Release notes

Sourced from FluentAssertions's releases.

8.9.0

What's Changed

New features

Improvements

Fixes

Documentation

Others

Commits viewable in compare view.

Updated Microsoft.AspNetCore.DataProtection.Abstractions from 10.0.3 to 10.0.7.

Release notes

Sourced from Microsoft.AspNetCore.DataProtection.Abstractions's releases.

No release notes found for this version range.

Commits viewable in compare view.

Updated Microsoft.AspNetCore.DataProtection.Extensions from 10.0.3 to 10.0.7.

Release notes

Sourced from Microsoft.AspNetCore.DataProtection.Extensions's releases.

No release notes found for this version range.

Commits viewable in compare view.

Updated Microsoft.EntityFrameworkCore.Design from 10.0.3 to 10.0.7.

Release notes

Sourced from Microsoft.EntityFrameworkCore.Design's releases.

No release notes found for this version range.

Commits viewable in compare view.

Updated Microsoft.Extensions.Configuration from 10.0.3 to 10.0.7.

Release notes

Sourced from Microsoft.Extensions.Configuration's releases.

No release notes found for this version range.

Commits viewable in compare view.

Updated Microsoft.Extensions.Configuration.FileExtensions from 10.0.3 to 10.0.7.

Release notes

Sourced from Microsoft.Extensions.Configuration.FileExtensions's releases.

No release notes found for this version range.

Commits viewable in compare view.

Updated Microsoft.Extensions.Configuration.Json from 10.0.3 to 10.0.7.

Release notes

Sourced from Microsoft.Extensions.Configuration.Json's releases.

No release notes found for this version range.

Commits viewable in compare view.

Updated Microsoft.Extensions.Configuration.UserSecrets from 10.0.3 to 10.0.7.

Release notes

Sourced from Microsoft.Extensions.Configuration.UserSecrets's releases.

No release notes found for this version range.

Commits viewable in compare view.

Updated Microsoft.Extensions.Hosting from 10.0.3 to 10.0.7.

Release notes

Sourced from Microsoft.Extensions.Hosting's releases.

No release notes found for this version range.

Commits viewable in compare view.

Updated Microsoft.Extensions.Http from 10.0.3 to 10.0.7.

Release notes

Sourced from Microsoft.Extensions.Http's releases.

No release notes found for this version range.

Commits viewable in compare view.

Updated Microsoft.NET.Test.Sdk from 18.0.1 to 18.5.1.

Release notes

Sourced from Microsoft.NET.Test.Sdk's releases.

18.5.1

What's Changed

Full Changelog: microsoft/vstest@v18.5.0...v18.5.1

18.5.0

⚠️ Unlisted on Nuget, because of #​15718

What's Changed

Full Changelog: microsoft/vstest@v18.4.0...v18.5.0

18.4.0

What's Changed

New Contributors

Full Changelog: microsoft/vstest@v18.3.0...v18.4.0

18.3.0

What's Changed

Internal fixes and updates

New Contributors

Commits viewable in compare view.

Updated MSTest.TestAdapter from 4.1.0 to 4.2.2.

Release notes

Sourced from MSTest.TestAdapter's releases.

4.2.1

See the release notes here

Commits viewable in compare view.

Updated MSTest.TestFramework from 4.1.0 to 4.2.2.

Release notes

Sourced from MSTest.TestFramework's releases.

4.2.1

See the release notes here

Commits viewable in compare view.

Updated Npgsql.EntityFrameworkCore.PostgreSQL from 10.0.0 to 10.0.1.

Release notes

Sourced from Npgsql.EntityFrameworkCore.PostgreSQL's releases.

No release notes found for this version range.

Commits viewable in compare view.

Updated Quartz from 3.15.1 to 3.18.1.

Release notes

Sourced from Quartz's releases.

3.18.1

Quartz.NET 3.18.1 is a maintenance release that addresses a timezone-related bug, security advisories on transitive dependencies, and an issue that prevented the new Redis distributed-lock package from publishing to nuget.org.

Highlights

  • Fix GetTimeBefore for positive-offset timezonesCronExpression.GetTimeBefore could throw ArgumentOutOfRangeException for cron expressions evaluated against timezones with positive UTC offsets (e.g. Europe/Helsinki, Asia/Tokyo). Backported from main.
  • Redis package renamed to Quartz.Extensions.Redis — the original Quartz.Redis package id from 3.18.0 collided with an unrelated v1.0.0 already on nuget.org and could not be published. The 3.18.0 release was shipped with IsPackable=false as a workaround; 3.18.1 picks the umbrella id Quartz.Extensions.Redis (matching Quartz.Extensions.DependencyInjection / Quartz.Extensions.Hosting) and re-enables publication. There are no consumers to migrate — the original id was never on nuget.org.
  • Vulnerable transitive dependency bumps — addresses moderate advisories that were blocking restore on the 3.x CI pipeline.

What's Changed

Full Changelog: quartznet/quartznet@v3.18.0...v3.18.1

3.18.0

Quartz.NET 3.18.0 is a major feature release with 8 new capabilities, performance improvements, and important bug fixes.

New Features

RFC 5545 RRULE recurrence trigger

Quartz.NET now supports scheduling with iCalendar recurrence rules (RFC 5545 RRULE), enabling complex patterns that cannot be expressed with cron expressions — such as "2nd Monday of every month" or "last weekday of March each year."

A custom lightweight RRULE engine (~1.5K LOC) handles all frequencies (YEARLY through SECONDLY), all BY* rules (BYDAY, BYMONTHDAY, BYSETPOS, etc.), COUNT, UNTIL, INTERVAL, and WKST. No new external dependencies. No database schema changes — uses the existing SIMPROP_TRIGGERS table.

ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger")
    .WithRecurrenceSchedule("FREQ=MONTHLY;BYDAY=2MO", b => b
        .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("America/New_York")))
    .StartNow()
    .Build();
RRULE Pattern
FREQ=MONTHLY;BYDAY=2MO Every 2nd Monday of the month
FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,WE,FR Every other week on Mon/Wed/Fri
FREQ=YEARLY;BYMONTH=3;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1 Last weekday of March each year
FREQ=MONTHLY;BYMONTHDAY=-1 Last day of every month
FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR Every weekday

(#​2990) — Closes #​1259

Execution groups for per-node thread limits

Tag triggers with an execution group to limit how many threads a category of jobs can consume concurrently on each node. This prevents resource-intensive jobs from starving lightweight work.

services.AddQuartz(q =>
{
    q.UseExecutionLimits(limits =>
    {
        limits.ForGroup("batch-jobs", maxConcurrent: 2);
        limits.ForDefaultGroup(maxConcurrent: 10);
        limits.ForOtherGroups(maxConcurrent: 5);
    });

    q.AddTrigger(t => t
        .ForJob("heavyJob")
        .WithExecutionGroup("batch-jobs")
        .WithCronSchedule("0 0/5 * * * ?"));
});

... (truncated)

3.17.1

Highlights

Jenkins-style H (hash) token for cron expressions

Quartz.NET now supports the H (hash) token in cron expressions, inspired by Jenkins. The H token resolves to a deterministic value based on the trigger's identity, spreading job execution times to avoid the thundering herd problem when many triggers share the same schedule.

Supported forms: H, H(min-max), H/step, H(min-max)/step

// Runs at a consistent but spread-out minute each hour
trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "myGroup")
    .WithCronSchedule("0 H * * * ?")
    .Build();

// Runs every 15 minutes, starting at a hash-determined offset
trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "myGroup")
    .WithCronSchedule("0 H/15 * * * ?")
    .Build();

The hash seed is automatically derived from the trigger's identity (name + group) when using TriggerBuilder, or can be provided explicitly. See the cron trigger documentation for full details.

Structured logging history plugins

New StructuredLoggingJobHistoryPlugin and StructuredLoggingTriggerHistoryPlugin provide first-class support for structured logging frameworks like Serilog and NLog. Unlike the existing logging plugins that use index-based format placeholders ({0}, {1}), these use named MEL-style message template parameters ({JobName}, {TriggerGroup}, etc.), making log output queryable in structured logging sinks and avoiding template cache memory leaks.

quartz.plugin.jobHistory.type = Quartz.Plugin.History.StructuredLoggingJobHistoryPlugin, Quartz.Plugins
quartz.plugin.triggerHistory.type = Quartz.Plugin.History.StructuredLoggingTriggerHistoryPlugin, Quartz.Plugins

Message templates are fully configurable via standard Quartz property configuration.

Bug Fixes

  • Fix triggers getting permanently stuck in ACQUIRED state — Triggers could become permanently stuck if the scheduler crashed or was killed between acquiring a trigger and firing it. (#​2980)
  • Fix StoreCalendar overriding paused trigger state — Storing a calendar with updateTriggers: true no longer resets paused triggers back to normal state. (#​2968)
  • Fix DoCheckin not retrying transient database errors — Cluster checkin now properly retries on transient database failures instead of silently failing. (#​2970)
  • Fix Dashboard /_blazor endpoint conflict — The Quartz Dashboard no longer conflicts with host applications that also use Blazor. (#​2975)
  • Fix spurious ERROR log on zombie transaction rollback — Rolling back a zombie transaction no longer logs a misleading ERROR. (#​2978)

Full Changelog: quartznet/quartznet@v3.17.0...v3.17.1

3.17.0

This is a major bug-fix release with 40+ fixes spanning trigger state management, clustering reliability, DST handling, misfire accuracy, and scheduler lifecycle. An optional database schema migration improves misfire handling.

Highlights

Optional database migration: MISFIRE_ORIG_FIRE_TIME column

A new optional column MISFIRE_ORIG_FIRE_TIME on QRTZ_TRIGGERS enables correct ScheduledFireTimeUtc for misfired triggers when using "fire now" misfire policies. Without it, ScheduledFireTimeUtc equals FireTimeUtc for misfired triggers (the pre-existing behavior). RAMJobStore does not require this migration.

Migration script: database/schema_30_add_misfire_orig_fire_time.sql (covers SQL Server, PostgreSQL, MySQL, SQLite, Oracle, Firebird)

Clustering and concurrency fixes

  • Fix DisallowConcurrentExecution jobs running simultaneously in cluster (#​2697)
  • Fix false cluster recovery causing DisallowConcurrentExecution violation (#​2915)
  • Fix triggers stuck in BLOCKED state for DisallowConcurrentExecution jobs (#​2822)
  • Fix FIRED_TRIGGERS not cleaned up on job deletion mid-execution (#​1696)
  • Handle transient database exceptions (deadlocks) with automatic retry (#​2883, #​2952)
  • Fix PostgreSQL transaction abort error on lock contention (#​2884)
  • Fix SQLite "database is locked" errors with dedicated semaphore (#​2323)
  • Add MySQL FORCE INDEX hints for slow trigger acquisition queries (#​547)

Trigger state and fire time accuracy

  • Fix GetTriggerState returning Complete instead of Blocked for executing triggers (#​2255)
  • Fix RAMJobStore.TriggersFired skipping triggers causing wrong trigger/job execution (#​1386)
  • Fix ScheduledFireTimeUtc returning wrong value after misfire (#​2899)
  • Fix PreviousFireTimeUtc reset to null on restart with OverWriteExistingData=true (#​1834)
  • Fix SimpleTrigger first fire time wrong when created long before scheduling (#​2455)
  • Fix CronTrigger double-firing when rescheduled with old StartTimeUtc (#​2909)
  • Fix recovery trigger missing original JobData (#​2083)
  • Fix misfired blocked triggers not being deleted from database (#​1646)
  • Fix DoNothing misfire policy skipping fire times within threshold (#​2912)

DST and time handling

  • Fix DailyTimeIntervalTrigger extra fire during DST fall-back (#​2917)
  • Fix DailyTimeIntervalTrigger mutating StartTimeUtc during fire time computation (#​2906)
  • Fix DailyTimeIntervalTrigger RepeatCount to apply per day (#​1633)
  • Fix scheduler thread stuck after system clock jumps backward (#​1508)
  • Fix ComputeFireTimesBetween modifying trigger StartTimeUtc (#​2722)

Scheduler lifecycle and threading

  • Fix scheduler hang on shutdown: replace Monitor.Wait with async SemaphoreSlim (#​2877)
  • Fix shutdown deadlock (#​2830)
  • Release acquired triggers on shutdown instead of leaking them (#​2881)
  • Fix DedicatedThreadPool threads leaking on scheduler shutdown (#​1357)
  • Use dedicated thread for scheduler loop to prevent missed triggers under high CPU (#​781)

Job execution

  • Fix RefireImmediately with JobChainingJobListener firing chain prematurely (#​663)
  • Fix AsyncLocal flow from IJobFactory.NewJob to IJob.Execute (#​1528)
  • Add IJobDetail property to JobExecutionException (#​1442)

... (truncated)

3.16.1

This release hopefully fixes the hiccup we had with the versioning/packaging of the new Dashboard package.

What's Changed

Full Changelog: quartznet/quartznet@v3.16.0...v3.16.1

3.16.0

On top of great community fixes, this release also brings the experimental Dashboard into action. You can enable it on NET 8 and later, see documentation for details.

What's Changed

Full Changelog: quartznet/quartznet@v3.15.1...v3.16.0

Commits viewable in compare view.

Updated Quartz.Extensions.DependencyInjection from 3.15.1 to 3.18.1.

Release notes

Sourced from Quartz.Extensions.DependencyInjection's releases.

3.18.1

Quartz.NET 3.18.1 is a maintenance release that addresses a timezone-related bug, security advisories on transitive dependencies, and an issue that prevented the new Redis distributed-lock package from publishing to nuget.org.

Highlights

  • Fix GetTimeBefore for positive-offset timezonesCronExpression.GetTimeBefore could throw ArgumentOutOfRangeException for cron expressions evaluated against timezones with positive UTC offsets (e.g. Europe/Helsinki, Asia/Tokyo). Backported from main.
  • Redis package renamed to Quartz.Extensions.Redis — the original Quartz.Redis package id from 3.18.0 collided with an unrelated v1.0.0 already on nuget.org and could not be published. The 3.18.0 release was shipped with IsPackable=false as a workaround; 3.18.1 picks the umbrella id Quartz.Extensions.Redis (matching Quartz.Extensions.DependencyInjection / Quartz.Extensions.Hosting) and re-enables publication. There are no consumers to migrate — the original id was never on nuget.org.
  • Vulnerable transitive dependency bumps — addresses moderate advisories that were blocking restore on the 3.x CI pipeline.

What's Changed

Full Changelog: quartznet/quartznet@v3.18.0...v3.18.1

3.18.0

Quartz.NET 3.18.0 is a major feature release with 8 new capabilities, performance improvements, and important bug fixes.

New Features

RFC 5545 RRULE recurrence trigger

Quartz.NET now supports scheduling with iCalendar recurrence rules (RFC 5545 RRULE), enabling complex patterns that cannot be expressed with cron expressions — such as "2nd Monday of every month" or "last weekday of March each year."

A custom lightweight RRULE engine (~1.5K LOC) handles all frequencies (YEARLY through SECONDLY), all BY* rules (BYDAY, BYMONTHDAY, BYSETPOS, etc.), COUNT, UNTIL, INTERVAL, and WKST. No new external dependencies. No database schema changes — uses the existing SIMPROP_TRIGGERS table.

ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger")
    .WithRecurrenceSchedule("FREQ=MONTHLY;BYDAY=2MO", b => b
        .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("America/New_York")))
    .StartNow()
    .Build();
RRULE Pattern
FREQ=MONTHLY;BYDAY=2MO Every 2nd Monday of the month
FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,WE,FR Every other week on Mon/Wed/Fri
FREQ=YEARLY;BYMONTH=3;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1 Last weekday of March each year
FREQ=MONTHLY;BYMONTHDAY=-1 Last day of every month
FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR Every weekday

(#​2990) — Closes #​1259

Execution groups for per-node thread limits

Tag triggers with an execution group to limit how many threads a category of jobs can consume concurrently on each node. This prevents resource-intensive jobs from starving lightweight work.

services.AddQuartz(q =>
{
    q.UseExecutionLimits(limits =>
    {
        limits.ForGroup("batch-jobs", maxConcurrent: 2);
        limits.ForDefaultGroup(maxConcurrent: 10);
        limits.ForOtherGroups(maxConcurrent: 5);
    });

    q.AddTrigger(t => t
        .ForJob("heavyJob")
        .WithExecutionGroup("batch-jobs")
        .WithCronSchedule("0 0/5 * * * ?"));
});

... (truncated)

3.17.1

Highlights

Jenkins-style H (hash) token for cron expressions

Quartz.NET now supports the H (hash) token in cron expressions, inspired by Jenkins. The H token resolves to a deterministic value based on the trigger's identity, spreading job execution times to avoid the thundering herd problem when many triggers share the same schedule.

Supported forms: H, H(min-max), H/step, H(min-max)/step

// Runs at a consistent but spread-out minute each hour
trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "myGroup")
    .WithCronSchedule("0 H * * * ?")
    .Build();

// Runs every 15 minutes, starting at a hash-determined offset
trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "myGroup")
    .WithCronSchedule("0 H/15 * * * ?")
    .Build();

The hash seed is automatically derived from the trigger's identity (name + group) when using TriggerBuilder, or can be provided explicitly. See the cron trigger documentation for full details.

Structured logging history plugins

New StructuredLoggingJobHistoryPlugin and StructuredLoggingTriggerHistoryPlugin provide first-class support for structured logging frameworks like Serilog and NLog. Unlike the existing logging plugins that use index-based format placeholders ({0}, {1}), these use named MEL-style message template parameters ({JobName}, {TriggerGroup}, etc.), making log output queryable in structured logging sinks and avoiding template cache memory leaks.

quartz.plugin.jobHistory.type = Quartz.Plugin.History.StructuredLoggingJobHistoryPlugin, Quartz.Plugins
quartz.plugin.triggerHistory.type = Quartz.Plugin.History.StructuredLoggingTriggerHistoryPlugin, Quartz.Plugins

Message templates are fully configurable via standard Quartz property configuration.

Bug Fixes

  • Fix triggers getting permanently stuck in ACQUIRED state — Triggers could become permanently stuck if the scheduler crashed or was killed between acquiring a trigger and firing it. (#​2980)
  • Fix StoreCalendar overriding paused trigger state — Storing a calendar with updateTriggers: true no longer resets paused triggers back to normal state. (#​2968)
  • Fix DoCheckin not retrying transient database errors — Cluster checkin now properly retries on transient database failures instead of silently failing. (#​2970)
  • Fix Dashboard /_blazor endpoint conflict — The Quartz Dashboard no longer conflicts with host applications that also use Blazor. (#​2975)
  • Fix spurious ERROR log on zombie transaction rollback — Rolling back a zombie transaction no longer logs a misleading ERROR. (#​2978)

Full Changelog: quartznet/quartznet@v3.17.0...v3.17.1

3.17.0

This is a major bug-fix release with 40+ fixes spanning trigger state management, clustering reliability, DST handling, misfire accuracy, and scheduler lifecycle. An optional database schema migration improves misfire handling.

Highlights

Optional database migration: MISFIRE_ORIG_FIRE_TIME column

A new optional column MISFIRE_ORIG_FIRE_TIME on QRTZ_TRIGGERS enables correct ScheduledFireTimeUtc for misfired triggers when using "fire now" misfire policies. Without it, ScheduledFireTimeUtc equals FireTimeUtc for misfired triggers (the pre-existing behavior). RAMJobStore does not require this migration.

Migration script: database/schema_30_add_misfire_orig_fire_time.sql (covers SQL Server, PostgreSQL, MySQL, SQLite, Oracle, Firebird)

Clustering and concurrency fixes

  • Fix DisallowConcurrentExecution jobs running simultaneously in cluster (#​2697)
  • Fix false cluster recovery causing DisallowConcurrentExecution violation (#​2915)
  • Fix triggers stuck in BLOCKED state for DisallowConcurrentExecution jobs (#​2822)
  • Fix FIRED_TRIGGERS not cleaned up on job deletion mid-execution (#​1696)
  • Handle transient database exceptions (deadlocks) with automatic retry (#​2883, #​2952)
  • Fix PostgreSQL transaction abort error on lock contention (#​2884)
  • Fix SQLite "database is locked" errors with dedicated semaphore (#​2323)
  • Add MySQL FORCE INDEX hints for slow trigger acquisition queries (#​547)

Trigger state and fire time accuracy

  • Fix GetTriggerState returning Complete instead of Blocked for executing triggers (#​2255)
  • Fix RAMJobStore.TriggersFired skipping triggers causing wrong trigger/job execution (#​1386)
  • Fix ScheduledFireTimeUtc returning wrong value after misfire (#​2899)
  • Fix PreviousFireTimeUtc reset to null on restart with OverWriteExistingData=true (#​1834)
  • Fix SimpleTrigger first fire time wrong when created long before scheduling (#​2455)
  • Fix CronTrigger double-firing when rescheduled with old StartTimeUtc (#​2909)
  • Fix recovery trigger missing original JobData (#​2083)
  • Fix misfired blocked triggers not being deleted from database (#​1646)
  • Fix DoNothing misfire policy skipping fire times within threshold (#​2912)

DST and time handling

  • Fix DailyTimeIntervalTrigger extra fire during DST fall-back (#​2917)
  • Fix DailyTimeIntervalTrigger mutating StartTimeUtc during fire time computation (#​2906)
  • Fix DailyTimeIntervalTrigger RepeatCount to apply per day (#​1633)
  • Fix scheduler thread stuck after system clock jumps backward (#​1508)
  • Fix ComputeFireTimesBetween modifying trigger StartTimeUtc (#​2722)

Scheduler lifecycle and threading

  • Fix scheduler hang on shutdown: replace Monitor.Wait with async SemaphoreSlim (#​2877)
  • Fix shutdown deadlock (#​2830)
  • Release acquired triggers on shutdown instead of leaking them (#​2881)
  • Fix DedicatedThreadPool threads leaking on scheduler shutdown (#​1357)
  • Use dedicated thread for scheduler loop to prevent missed triggers under high CPU (#​781)

Job execution

  • Fix RefireImmediately with JobChainingJobListener firing chain prematurely (#​663)
  • Fix AsyncLocal flow from IJobFactory.NewJob to IJob.Execute (#​1528)
  • Add IJobDetail property to JobExecutionException (#​1442)

... (truncated)

3.16.1

This release hopefully fixes the hiccup we had with the versioning/packaging of the new Dashboard package.

What's Changed

Full Changelog: quartznet/quartznet@v3.16.0...v3.16.1

3.16.0

On top of great community fixes, this release also brings the experimental Dashboard into action. You can enable it on NET 8 and later, see documentation for details.

What's Changed

Full Changelog: quartznet/quartznet@v3.15.1...v3.16.0

Commits viewable in compare view.

Updated Quartz.Extensions.Hosting from 3.15.1 to 3.18.1.

Release notes

Sourced from Quartz.Extensions.Hosting's releases.

3.18.1

Quartz.NET 3.18.1 is a maintenance release that addresses a timezone-related bug, security advisories on transitive dependencies, and an issue that prevented the new Redis distributed-lock package from publishing to nuget.org.

Highlights

  • Fix GetTimeBefore for positive-offset timezonesCronExpression.GetTimeBefore could throw ArgumentOutOfRangeException for cron expressions evaluated against timezones with positive UTC offsets (e.g. Europe/Helsinki, Asia/Tokyo). Backported from main.
  • Redis package renamed to Quartz.Extensions.Redis — the original Quartz.Redis package id from 3.18.0 collided with an unrelated v1.0.0 already on nuget.org and could not be published. The 3.18.0 release was shipped with IsPackable=false as a workaround; 3.18.1 picks the umbrella id Quartz.Extensions.Redis (matching Quartz.Extensions.DependencyInjection / Quartz.Extensions.Hosting) and re-enables publication. There are no consumers to migrate — the original id was never on nuget.org.
  • Vulnerable transitive dependency bumps — addresses moderate advisories that were blocking restore on the 3.x CI pipeline.

What's Changed

Full Changelog: quartznet/quartznet@v3.18.0...v3.18.1

3.18.0

Quartz.NET 3.18.0 is a major feature release with 8 new capabilities, performance improvements, and important bug fixes.

New Features

RFC 5545 RRULE recurrence trigger

Quartz.NET now supports scheduling with iCalendar recurrence rules (RFC 5545 RRULE), enabling complex patterns that cannot be expressed with cron expressions — such as "2nd Monday of every month" or "last weekday of March each year."

A custom lightweight RRULE engine (~1.5K LOC) handles all frequencies (YEARLY through SECONDLY), all BY* rules (BYDAY, BYMONTHDAY, BYSETPOS, etc.), COUNT, UNTIL, INTERVAL, and WKST. No new external dependencies. No database schema changes — uses the existing SIMPROP_TRIGGERS table.

ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger")
    .WithRecurrenceSchedule("FREQ=MONTHLY;BYDAY=2MO", b => b
        .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("America/New_York")))
    .StartNow()
    .Build();
RRULE Pattern
FREQ=MONTHLY;BYDAY=2MO Every 2nd Monday of the month
FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,WE,FR Every other week on Mon/Wed/Fri
FREQ=YEARLY;BYMONTH=3;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1 Last weekday of March each year
FREQ=MONTHLY;BYMONTHDAY=-1 Last day of every month
FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR Every weekday

(#​2990) — Closes #​1259

Execution groups for per-node thread limits

Tag triggers with an execution group to limit how many threads a category of jobs can consume concurrently on each node. This prevents resource-intensive jobs from starving lightweight work.

services.AddQuartz(q =>
{
    q.UseExecutionLimits(limits =>
    {
        limits.ForGroup("batch-jobs", maxConcurrent: 2);
        limits.ForDefaultGroup(maxConcurrent: 10);
        limits.ForOtherGroups(maxConcurrent: 5);
    });

    q.AddTrigger(t => t
        .ForJob("heavyJob")
        .WithExecutionGroup("batch-jobs")
        .WithCronSchedule("0 0/5 * * * ?"));
});

... (truncated)

3.17.1

Highlights

Jenkins-style H (hash) token for cron expressions

Quartz.NET now supports the H (hash) token in cron expressions, inspired by Jenkins. The H token resolves to a deterministic value based on the trigger's identity, spreading job execution times to avoid the thundering herd problem when many triggers share the same schedule.

Supported forms: H, H(min-max), H/step, H(min-max)/step

// Runs at a consistent but spread-out minute each hour
trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "myGroup")
    .WithCronSchedule("0 H * * * ?")
    .Build();

// Runs every 15 minutes, starting at a hash-determined offset
trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "myGroup")
    .WithCronSchedule("0 H/15 * * * ?")
    .Build();

The hash seed is automatically derived from the trigger's identity (name + group) when using TriggerBuilder, or can be provided explicitly. See the cron trigger documentation for full details.

Structured logging history plugins

New StructuredLoggingJobHistoryPlugin and StructuredLoggingTriggerHistoryPlugin provide first-class support for structured logging frameworks like Serilog and NLog. Unlike the existing logging plugins that use index-based format placeholders ({0}, {1}), these use named MEL-style message template parameters ({JobName}, {TriggerGroup}, etc.), making log output queryable in structured logging sinks and avoiding template cache memory leaks.

quartz.plugin.jobHistory.type = Quartz.Plugin.History.StructuredLoggingJobHistoryPlugin, Quartz.Plugins
quartz.plugin.triggerHistory.type = Quartz.Plugin.History.StructuredLoggingTriggerHistoryPlugin, Quartz.Plugins

Message templates are fully configurable via standard Quartz property configuration.

Bug Fixes

  • Fix triggers getting permanently stuck in ACQUIRED state — Triggers could become permanently stuck if the scheduler crashed or was killed between acquiring a trigger and firing it. (#​2980)
  • Fix StoreCalendar overriding paused trigger state — Storing a calendar with updateTriggers: true no longer resets paused triggers back to normal state. (#​2968)
  • Fix DoCheckin not retrying transient database errors — Cluster checkin now properly retries on transient database failures instead of silently failing. (#​2970)
  • Fix Dashboard /_blazor endpoint conflict — The Quartz Dashboard no longer conflicts with host applications that also use Blazor. (#​2975)
  • Fix spurious ERROR log on zombie transaction rollback — Rolling back a zombie transaction no longer logs a misleading ERROR. (#​2978)

Full Changelog: quartznet/quartznet@v3.17.0...v3.17.1

3.17.0

This is a major bug-fix release with 40+ fixes spanning trigger state management, clustering reliability, DST handling, misfire accuracy, and scheduler lifecycle. An optional database schema migration improves misfire handling.

Highlights

Optional database migration: MISFIRE_ORIG_FIRE_TIME column

A new optional column MISFIRE_ORIG_FIRE_TIME on QRTZ_TRIGGERS enables correct ScheduledFireTimeUtc for misfired triggers when using "fire now" misfire policies. Without it, ScheduledFireTimeUtc equals FireTimeUtc for misfired triggers (the pre-existing behavior). RAMJobStore does not require this migration.

Migration script: database/schema_30_add_misfire_orig_fire_time.sql (covers SQL Server, PostgreSQL, MySQL, SQLite, Oracle, Firebird)

Clustering and concurrency fixes

  • Fix DisallowConcurrentExecution jobs running simultaneously in cluster (#​2697)
  • Fix false cluster recovery causing DisallowConcurrentExecution violation (#​2915)
  • Fix triggers stuck in BLOCKED state for DisallowConcurrentExecution jobs (#​2822)
  • Fix FIRED_TRIGGERS not cleaned up on job deletion mid-execution (#​1696)
  • Handle transient database exceptions (deadlocks) with automatic retry (#​2883, #​2952)
  • Fix PostgreSQL transaction abort error on lock contention (#​2884)
  • Fix SQLite "database is locked" errors with dedicated semaphore (#​2323)
  • Add MySQL FORCE INDEX hints for slow trigger acquisition queries (#​547)

Trigger state and fire time accuracy

  • Fix GetTriggerState returning Complete instead of Blocked for executing triggers (#​2255)
  • Fix RAMJobStore.TriggersFired skipping triggers causing wrong trigger/job execution (#​1386)
  • Fix ScheduledFireTimeUtc returning wrong value after misfire (#​2899)
  • Fix PreviousFireTimeUtc reset to null on restart with OverWriteExistingData=true (#​1834)
  • Fix SimpleTrigger first fire time wrong when created long before scheduling (#​2455)
  • Fix CronTrigger double-firing when rescheduled with old StartTimeUtc (#​2909)
  • Fix recovery trigger missing original JobData (#​2083)
  • Fix misfired blocked triggers not being deleted from database (#​1646)
  • Fix DoNothing misfire policy skipping fire times within threshold (#​2912)

DST and time handling

  • Fix DailyTimeIntervalTrigger extra fire during DST fall-back (#​2917)
  • Fix DailyTimeIntervalTrigger mutating StartTimeUtc during fire time computation (#​2906)
  • Fix DailyTimeIntervalTrigger RepeatCount to apply per day (#​1633)
  • Fix scheduler thread stuck after system clock jumps backward (#​1508)
  • Fix ComputeFireTimesBetween modifying trigger StartTimeUtc (#​2722)

Scheduler lifecycle and threading

  • Fix scheduler hang on shutdown: replace Monitor.Wait with async SemaphoreSlim (#​2877)
  • Fix shutdown deadlock (#​2830)
  • Release acquired triggers on shutdown instead of leaking them (#​2881)
  • Fix DedicatedThreadPool threads leaking on scheduler shutdown (#​1357)
  • Use dedicated thread for scheduler loop to prevent missed triggers under high CPU (#​781)

Job execution

  • Fix RefireImmediately with JobChainingJobListener firing chain prematurely (#​663)
  • Fix AsyncLocal flow from IJobFactory.NewJob to IJob.Execute (#​1528)
  • Add IJobDetail property to JobExecutionException (#​1442)

... (truncated)

3.16.1

This release hopefully fixes the hiccup we had with the versioning/packaging of the new Dashboard package.

What's Changed

Full Changelog: quartznet/quartznet@v3.16.0...v3.16.1

3.16.0

On top of great community fixes, this release also brings the experimental Dashboard into action. You can enable it on NET 8 and later, see documentation for details.

What's Changed

Full Changelog: quartznet/quartznet@v3.15.1...v3.16.0

Commits viewable in compare view.

Updated Scriban from 6.5.3 to 6.6.0.

Release notes

Sourced from Scriban's releases.

6.6.0

Changes

✨ New Features

  • Add missing async generated code (8d23abb0)
  • Add limits for default safety (b5ac4bf3) by @​skdishansachin

🐛 Bug Fixes

  • Fix JsonElement support for netstandard (88943520)

🧰 Misc

  • Merge commit from fork (a6fe6074) by @​skdishansachin

Full Changelog: 6.5.8...6.6.0

Published with dotnet-releaser

6.5.8

Changes

🚀 Enhancements

  • Evaluate named arg. values in caller context (PR #​652) by @​meld-cp

🧰 Misc

  • Cleanup Include remove magic checks (PR #​651) by @​Benkei

Full Changelog: 6.5.7...6.5.8

Published with dotnet-releaser

6.5.7

Changes

🚀 Enhancements

  • Refactor Include using PushLocal and PopLocal Part 2 (PR #​650) by @​Benkei

Full Changelog: 6.5.6...6.5.7

Published with dotnet-releaser

6.5.6

Changes

🐛 Bug Fixes

  • Refactor Include using PushLocal and PopLocal (PR #​649) by @​Benkei
  • Fixes documentation (#​647) (6513395f)

🧰 Misc

  • Feature/#​645 broken link (PR #​646) by @​mikeclayton

Full Changelog: 6.5.5...6.5.6

Published with dotnet-releaser

6.5.5

Changes

🐛 Bug Fixes

  • Fix Include named arg values being lost for nested includes (PR #​643) by @​meld-cp

Full Changelog: [...

_De...

Description has been truncated

Bumps dotnet-ef from 8.0.19 to 8.0.26
Bumps FluentAssertions from 8.8.0 to 8.9.0
Bumps Microsoft.AspNetCore.DataProtection.Abstractions from 10.0.3 to 10.0.7
Bumps Microsoft.AspNetCore.DataProtection.Extensions from 10.0.3 to 10.0.7
Bumps Microsoft.EntityFrameworkCore.Design from 10.0.3 to 10.0.7
Bumps Microsoft.Extensions.Configuration from 10.0.3 to 10.0.7
Bumps Microsoft.Extensions.Configuration.FileExtensions from 10.0.3 to 10.0.7
Bumps Microsoft.Extensions.Configuration.Json from 10.0.3 to 10.0.7
Bumps Microsoft.Extensions.Configuration.UserSecrets from 10.0.3 to 10.0.7
Bumps Microsoft.Extensions.Hosting from 10.0.3 to 10.0.7
Bumps Microsoft.Extensions.Http from 10.0.3 to 10.0.7
Bumps Microsoft.NET.Test.Sdk from 18.0.1 to 18.5.1
Bumps MSTest.TestAdapter from 4.1.0 to 4.2.2
Bumps MSTest.TestFramework from 4.1.0 to 4.2.2
Bumps Npgsql.EntityFrameworkCore.PostgreSQL from 10.0.0 to 10.0.1
Bumps Quartz from 3.15.1 to 3.18.1
Bumps Quartz.Extensions.DependencyInjection from 3.15.1 to 3.18.1
Bumps Quartz.Extensions.Hosting from 3.15.1 to 3.18.1
Bumps Scriban from 6.5.3 to 6.6.0

---
updated-dependencies:
- dependency-name: dotnet-ef
  dependency-version: 8.0.26
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: FluentAssertions
  dependency-version: 8.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: Microsoft.AspNetCore.DataProtection.Abstractions
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Microsoft.AspNetCore.DataProtection.Abstractions
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Microsoft.AspNetCore.DataProtection.Extensions
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Microsoft.AspNetCore.DataProtection.Extensions
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Microsoft.EntityFrameworkCore.Design
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Microsoft.Extensions.Configuration
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Microsoft.Extensions.Configuration.FileExtensions
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Microsoft.Extensions.Configuration.FileExtensions
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Microsoft.Extensions.Configuration.Json
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Microsoft.Extensions.Configuration.UserSecrets
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Microsoft.Extensions.Hosting
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Microsoft.Extensions.Http
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: MSTest.TestAdapter
  dependency-version: 4.2.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: MSTest.TestFramework
  dependency-version: 4.2.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: Npgsql.EntityFrameworkCore.PostgreSQL
  dependency-version: 10.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Npgsql.EntityFrameworkCore.PostgreSQL
  dependency-version: 10.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Quartz
  dependency-version: 3.18.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: Quartz.Extensions.DependencyInjection
  dependency-version: 3.18.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: Quartz.Extensions.Hosting
  dependency-version: 3.18.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: Scriban
  dependency-version: 6.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added .NET Pull requests that update .NET code dependencies Pull requests that update a dependency file labels May 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file .NET Pull requests that update .NET code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants