Hangfire 1.7.29

The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org. Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package Hangfire --version 1.7.29
NuGet\Install-Package Hangfire -Version 1.7.29
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Hangfire" Version="1.7.29" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Hangfire --version 1.7.29
#r "nuget: Hangfire, 1.7.29"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Hangfire as a Cake Addin
#addin nuget:?package=Hangfire&version=1.7.29

// Install Hangfire as a Cake Tool
#tool nuget:?package=Hangfire&version=1.7.29

An easy and reliable way to perform fire-and-forget, delayed and recurring, long-running, short-running, CPU or I/O intensive tasks inside ASP.NET applications. No Windows Service / Task Scheduler required. Even ASP.NET is not required.
Backed by Redis, SQL Server, SQL Azure or MSMQ. This is a .NET alternative to Sidekiq, Resque and Celery.
https://www.hangfire.io/

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

NuGet packages (189)

Showing the top 5 NuGet packages that depend on Hangfire:

Package Downloads
VirtoCommerce.Platform.Hangfire The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org.

Virto Commerce is a flexible B2B ecommerce solution that offers powerful tools for enterprise business users. https://virtocommerce.com

N3O.Umbraco.Scheduler

TODO

ImmediaC.SimpleCms

ASP.NET Core based CMS

ComplianceAuditSystems.AcabimCommonServices

Package Description

Bnsights.Mvc

Bnsights.Mvc is RAD Helper DLL for MVC Projects in Bnsights DMCC. Also known as Bnsights Business Solutions Framework (BBSF).

GitHub repositories (20)

Showing the top 5 popular GitHub repositories that depend on Hangfire:

Repository Stars
elsa-workflows/elsa-core
A .NET workflows library
Kareadita/Kavita
Kavita is a fast, feature rich, cross platform reading server. Built with the goal of being a full solution for all your reading needs. Setup your own server and share your reading collection with your friends and family.
fullstackhero/dotnet-webapi-starter-kit
production grade .net 8 webapi starter kit with multitenancy support and clean code. 🔥
fullstackhero/blazor-starter-kit
Clean Architecture Template for Blazor WebAssembly Built with MudBlazor Components.
dotnetcore/osharp
OSharp是一个基于.Net6.0的快速开发框架,框架对 AspNetCore 的配置、依赖注入、日志、缓存、实体框架、Mvc(WebApi)、身份认证、功能权限、数据权限等模块进行更高一级的自动化封装,并规范了一套业务实现的代码结构与操作流程,使 .Net 框架更易于应用到实际项目开发中。
Version Downloads Last updated
1.8.11 164,430 2/23/2024
1.8.10 96,564 2/12/2024
1.8.9 173,059 1/24/2024
1.8.7 244,699 12/29/2023
1.8.6 752,191 10/18/2023
1.8.5 806,033 8/11/2023
1.8.4 177,776 7/27/2023
1.8.3 417,160 6/27/2023
1.8.2 439,856 5/26/2023
1.8.1 123,374 5/18/2023
1.8.0 282,779 4/28/2023
1.7.36 78,057 6/29/2023
1.7.35 19,748 5/18/2023
1.7.34 481,424 3/30/2023
1.7.33 1,036,697 1/31/2023
1.7.32 1,100,777 11/21/2022
1.7.31 1,874,819 8/19/2022
1.7.30 1,338,233 6/10/2022
1.7.29 305,470 5/23/2022
1.7.28 3,113,887 12/18/2021
1.7.27 948,634 11/3/2021
1.7.26 141,961 10/27/2021
1.7.25 1,097,074 8/30/2021
1.7.24 1,129,560 6/28/2021
1.7.23 643,889 5/28/2021
1.7.22 830,031 4/13/2021
1.7.21 14,682 4/12/2021
1.7.20 373,914 3/19/2021
1.7.19 1,349,804 1/15/2021
1.7.18 1,042,158 11/20/2020
1.7.17 538,747 10/20/2020
1.7.16 118,873 10/14/2020
1.7.15 73,416 10/8/2020
1.7.14 550,841 9/24/2020
1.7.13 141,482 9/15/2020
1.7.12 794,152 7/24/2020
1.7.11 2,289,903 4/15/2020
1.7.10 278,710 4/2/2020
1.7.9 2,114,973 1/20/2020
1.7.8 719,640 12/5/2019
1.7.7 793,771 10/22/2019
1.7.6 1,461,467 8/5/2019
1.7.5 323,616 7/18/2019
1.7.4 326,595 6/28/2019
1.7.3 631,181 5/23/2019
1.7.2 422,211 4/29/2019
1.7.1 396,222 4/16/2019
1.7.0 345,466 3/29/2019
1.6.30 29,222 4/29/2021
1.6.29 54,791 4/15/2020
1.6.28 76,249 1/14/2020
1.6.27 60,913 6/27/2019
1.6.26 75,157 5/23/2019
1.6.25 21,621 4/9/2019
1.6.24 115,270 3/27/2019
1.6.23 203,492 3/13/2019
1.6.22 647,373 1/25/2019
1.6.21 1,100,140 11/1/2018
1.6.20 1,089,606 7/31/2018
1.6.19 1,244,013 4/6/2018
1.6.18 27,630 4/5/2018
1.6.17 1,527,413 9/19/2017
1.6.16 159,327 9/2/2017
1.6.15 241,466 8/8/2017
1.6.14 293,024 6/16/2017
1.6.13 62,213 6/7/2017
1.6.12 549,529 3/22/2017
1.6.11 39,456 3/14/2017
1.6.10 11,315 3/13/2017
1.6.9 48,504 3/2/2017
1.6.8 353,932 12/21/2016
1.6.7 186,718 11/25/2016
1.6.6 173,004 10/13/2016
1.6.5 99,351 9/24/2016
1.6.4 78,887 8/30/2016
1.6.3 40,122 8/19/2016
1.6.2 48,837 8/5/2016
1.6.1 56,555 7/27/2016
1.6.0 34,298 7/15/2016
1.5.9 136,508 7/11/2016
1.5.8 48,632 6/17/2016
1.5.7 22,395 5/30/2016
1.5.6 61,219 4/22/2016
1.5.5 20,987 4/14/2016
1.5.4 46,841 3/22/2016
1.5.3 302,046 11/6/2015
1.5.2 25,790 10/15/2015
1.5.1 6,722 10/14/2015
1.5.0 54,762 10/1/2015
1.4.7 6,323 10/1/2015
1.4.6 26,927 8/29/2015
1.4.5 34,527 7/24/2015
1.4.4 5,730 7/23/2015
1.4.3 62,199 5/27/2015
1.4.2 13,733 5/6/2015
1.4.1 34,403 4/14/2015
1.3.4 59,203 2/4/2015
1.3.3 8,634 1/28/2015
1.3.2 6,027 1/27/2015
1.3.1 11,348 1/13/2015
1.3.0 11,934 12/10/2014
1.2.2 13,824 11/24/2014
1.2.1 5,487 11/22/2014
1.2.0 8,585 11/17/2014
1.1.1 26,433 9/5/2014
1.1.0 6,864 9/3/2014
1.0.2 9,546 7/1/2014
1.0.1 5,651 6/30/2014
1.0.0 5,952 6/30/2014
0.9.1 5,784 6/12/2014
0.9.0 4,317 6/7/2014
0.8.3 4,688 5/23/2014
0.8.2 4,247 5/21/2014
0.8.1 4,404 5/17/2014
0.8.0 5,481 5/2/2014
0.7.5 5,358 4/10/2014
0.7.4 4,406 4/7/2014
0.7.3 4,174 4/4/2014
0.7.2 4,417 4/4/2014
0.7.1 4,807 4/1/2014
0.7.0 4,538 3/22/2014
0.6.2 3,181 1/28/2014
0.6.1 3,140 1/27/2014
0.6.0 3,153 1/27/2014
0.5.2 3,123 11/19/2013
0.5.1 3,169 11/12/2013
0.5.0 4,588 11/10/2013

https://www.hangfire.io/blog/

Please see https://docs.hangfire.io/en/latest/upgrade-guides/upgrading-to-hangfire-1.7.html to learn how to upgrade from 1.6.X.

1.7.29

Hangfire.Core

• Added – `RecurringJobManager.TriggerExecution` method that returns identifier of a created job.
• Added – `GetRecurringJobIds` extension method for `JobStorageConnection` that returns only identifiers.
• Added – `DashboardMetric.Url` property to make it possible for metrics on the Overview page to be clickable.
• Changed – Bump Moment.js version to 2.29.3 in Dashboard UI (by @Westat-Transportation).
• Fixed – Deserialization issues with `DateOnly` and `TimeOnly` in .NET 6.0 or other new types in CoreLib.
• Fixed – Don't even try to catch unsafe exceptions like `OutOfMemoryException` or `StackOverflowException`.
• Fixed – Add non-breaking space between Server Id and Status glyph on the Servers page.
• Fixed – Problems with internal wait implementation shouldn't cause high CPU issues now, added protection and logging.
• Fixed – Wait can't be performed now on a signaled `ManualResetEvent` instance in `BackgroundExecution`.

Hangfire.SqlServer

• Fixed – Command batching is now fully working for the Microsoft.Data.SqlClient package (by @0xced).

1.7.28

Hangfire.Core

• Fixed – Reduce the number of attempts in `BackgroundJobStateChanger` to avoid infinite loops.
• Fixed – Typos in German translation (by @saxx).
• Fixed – Translations in Turkish translation (by @can-zengin).

Hangfire.SqlServer

• Fixed – Possibly fixed CPU consumption problems and high amounts of fetching queries after deploys to IIS.
• Fixed – No more than a single long-polling query is allowed per storage instance when using sub-second polling.
• Fixed – Don't depend on thread pool when sending heartbeats for active jobs to avoid problems when it's starved.

1.7.27

Hangfire.Core

• Added – Turkish language support for the Dashboard UI (by @csarigul).
• Fixed – Trigger button in the Dashboard UI doesn't respect a custom time zone resolver.
• Fixed – Dispatchers stopped when unable to add the ExecutionId data for an exception instance.
• Fixed – Safari's zoom feature breaks the Dashboard UI (by @oguzhantopcu).
• Fixed – Some typos in XML documentation comments (by @GitHubPang).

1.7.26

Hangfire.Core

• Security – Fix "Dashboard UI accessible from outside by default since 1.7.25" regression.

1.7.25

Hangfire.Core

• Changed – Upgrade Bootstrap from 3.3.7 to version 3.4.1 in Dashboard UI.
• Changed – Upgrade Chart.js from 2.7.3 to version 2.9.4 in Dashboard UI.
• Changed – Upgrade jQuery from 2.2.4 to version 3.6.0 in Dashboard UI.
• Fixed – Check background job existence before adding a continuation id to job parameters.
• Fixed – Incorrect validation for the `HeartbeatInterval` option (by @GitHubPang).
• Fixed – Use better stacking for succeeded/failed charts in the Dashboard UI.
• Fixed – Move explicit styles to CSS to fix possible CSP errors in Dashboard UI.
• Fixed – Reset default sync auth filter when async one is specified in Dashboard UI.

Hangfire.SqlServer

• Fixed – Avoid any blocked rows when removing inactive servers from the `Server` table.

Hangfire.NetCore and Hangfire.AspNetCore

• Added – More overloads for the `AddHangfireServer` extension method in .NET Core.
• Deprecated – `UseHangfireServer` method for targets where `AddHangfireServer` one is available.

1.7.24

Hangfire.Core

• Added – Support for async auth methods via the `DashboardOptions.AsyncAuthorization` property (by @rosenbjerg).
• Fixed – Error alert in Dashboard UI is now correctly shown when sidebar is present (by @danillewin).
• Fixed – Reference an empty favicon in Dashboard UI to prevent backend 404s (by @dan2468).
• Fixed – Back-to-site link text in Dashboard UI is now hidden on small screens (by @danillewin).
• Fixed – Avoid memory leak in the `AppBuilderExtensions` class (by @LordJZ).
• Fixed – Make the `TypeHelper` class public instead of internal to use it outside.

Hangfire.SqlServer

• Changed – Don't use the `readcommittedlock` table hint when not required.
• Project – Stop using `TransactionScope` class in tests, re-create database instead.
• Project – Make it possible to run SQL Server tests on Mono on Linux.

Hangfire.AspNetCore

• Added – Support for async auth methods via the `DashboardOptions.AsyncAuthorization` property (by @rosenbjerg).
• Added – Authorization policy support via the new `MapHangfireDashboardWithAuthorizationPolicy` method (by @dasiths).

1.7.23

Hangfire.Core

• Added – `JobId` property to `JobPerformanceException` for error logging purposes (by @Plasma).
• Fixed – `JsonSerializationException` when using `IdempotentCompletionAttribute`.
• Fixed – Unreported yet corner case related to daylight time transition by upgrading Cronos to 0.7.1 (by @aidmsu).
• Fixed – Dashboard issue: recurring job table doesn't handle very long cron strings.
• Fixed – Add missing argument-is-null check for the `DeserializePayload` method.
• Project – Replace deprecated `PerformContext` ctor usage to avoid alerts in SonarQube (by @kumaheiyama).
• Project – Avoid possible `NullReferenceException` in tests to fix alerts in Fortify analyser.
• Project – Release connections properly in tests to fix alerts in Fortify analyser.

Hangfire.SqlServer

• Fixed – `NotImplementedException` in `Transaction.EnlistPromotableSinglePhase` when running on Mono.

1.7.22

Hangfire.Core

• Fixed – Fonts-related regression in Dashboard UI after upgrading Bootstrap in 1.7.21.

1.7.21

Hangfire.Core

• Changed – Upgrade jQuery from 2.1.4 to 2.2.4 in Dashboard UI.
• Changed – Upgrade Bootstrap from 3.3.5 to 3.3.7 in Dashboard UI.
• Changed – Upgrade Moment.js to 2.29.1 in Dashboard UI.
• Project – Update RazorGenerator.MsBuild package from 2.4.7 to version 2.5.0.
• Project – Update 7-Zip.CommandLine package from 9.20.0 to version 18.1.0.

Hangfire.SqlServer

• Fixed – Ensure connection is released when exception is thrown when during lock release.
• Fixed – "A network-related or instance-specific error" when using `DisableConcurrentExecution` for long-running jobs.

1.7.20

Hangfire.Core

• Added – Norwegian translations (by @khellang).
• Fixed – Correction on brazilian portuguese translations (by @Prestini).
• Fixed – Changing time zone of recurring job without changing cron expression causes immediate execution.

Hangfire.SqlServer

Please see https://www.hangfire.io/blog/2021/03/19/hangfire-1.7.20.html for details, manual changes
required for those who already migrated to Schema 6 and 7. This problem will be also fixed in a new
migration in Hangfire 1.8.0.

• Fixed – `Schema 6` migration now fixes problem that prevents 2,147,483,648th job from being enqueued.

Hangfire.NetCore and Hangfire.AspNetCore

• Added – An overload for `AddHangfireServer` utilizing `IServiceProvider` (by @penenkel).
• Added – `IBackgroundJobClientFactory` and `IRecurringJobManagerFactory` interfaces to fix the following bug.
• Fixed – Dashboard UI is unable to 'requeue' job on other then default `JobStorage`.

1.7.19

Hangfire.Core

• Added – German (Deutsch) Dashboard UI localization (by @d-oit).
• Added – `IGlobalConfiguration.UseMaxArgumentSizeToRender` method to avoid "VALUE TOO BIG" messages.
• Changed – Remove "readonly" keyword from the `JobMethodCallRenderer.MaxArgumentToRenderSize` field to support .NET 5.0.
• Fixed – Race condition in `AspNetShutdownDetector` leads to `NullReferenceException` (by @jr01).
• Fixed – Avoid ArgumentException: Item has already been added when preserving an original exception.
• Project – Add repository link to nuspec files (by @jeremyhayes).

Hangfire.SqlServer

• Fixed – Return `null` instead of throwing FormatException when job id can't be parsed.
• Project – Run the entire Hangfire.SqlServer test suite against the new Microsoft.Data.SqlClient package.

1.7.18

Hangfire.SqlServer

• Added – `SqlServerStorageOptions.DeleteExpiredBatchSize` option to remove more expired records in a single pass.
• Fixed – Don't throw from `SqlServerStorage.ToString` method when using custom factory or existing connection.

1.7.17

Hangfire.SqlServer

• Fixed – SqlException "Incorrect syntax near 'throw'" after upgrading to 1.7.15 when using SQL Server 2008 or 2008R2.

1.7.16

Hangfire.SqlServer

• Fixed – Blocking problems when using multiple storages with the same queue names in the same process (appeared in 1.7.9).

1.7.15

Hangfire.Core

• Added – `IGlobalConfiguration.UseMaxLinesInExceptionDetails` option to cap the size of stack traces.
• Changed – Only the first 100 lines of a stack trace will be preserved now by default in Failed state.
• Fixed – Don't let exceptions with huge stack traces take up too much storage space.

Hangfire.SqlServer

• Fixed – Avoid deadlocks when using the `SetJobParameter` method without introducing issues for older schemas.
• Fixed – Remove duplicate sorting in the `SqlServerMonitoringApi.GetJobs` method which is used by a lot of queries.

1.7.14

Hangfire.SqlServer

• Fixed – Duplicate entries in the `JobParameters` table after upgrading to version 1.7.13.
• Fixed – Extensive retries on a method that has a retry attribute after upgrading to 1.7.13.
• Fixed – "ArgumentException: An item with the same key has already been added. Key: RetryCount" in `SqlServerMonitoringApi`.

1.7.13

Hangfire.Core

• Added – Catalan translation for Dashboard UI (based on Spanish translation, by @agausachs).
• Added – Support for configuring recommended serializer settings via callback (by @Yaevh).
• Fixed – Use correct wording for job parameters in Job Details page, add it to resources.
• Fixed – Don't push negative points to the realtime graph in dashboard.
• Fixed – Don't depend on history collection type returned from Storage API.
• Project – Execute tests one by one to ensure exit code isn't being lost (by @willchis).

Hangfire.SqlServer

• Added – `UseIgnoreDupKeyOption` for SQL Server storage configuration (changes to [Set] and [Hash] tables required).
• Fixed – Don't truncate too long keys silently, throw exceptions instead.
• Fixed – Add missing null checks for methods in the `SqlServerWriteOnlyTransaction` class.
• Fixed – Change `holdlock` hint to `xlock` in `merge` statements in transaction to prevent deadlocks.
• Fixed – Don't rethrow "Lock request time out period exceeded" exceptions from expiration manager.
• Fixed – Increase [Server].[Id] column's length to 200 for new installations.

1.7.12

Hangfire.Core

• Added – Display actual job payload and exception message on job details page when could find the method.
• Added – French translation for Dashboard UI (by @PaulARoy).
• Added – Expose IStorageConnection.GetRecurringJobs(IEnumerable ids) to public.
• Changed – Bump thread priority in heartbeat process for constrained environments.
• Changed – Display job properties in a dedicated row in job details page.
• Fixed – Avoid storage round-trip when displaying continuations on job details page.

1.7.11

Hangfire.Core

• Added – Display recurring job exceptions directly in the Dashboard UI.
• Added – Add built-in support for reliable shutdown detection of ASP.NET apps.
• Changed – Unify exception handling in recurring job scheduler.
• Changed – Internal feature to perform state changes without calling any filters.
• Changed – Decrease the number of retry attempts for recurring jobs to 5.
• Fixed – Let workers to ignore any state change filters when all previous attempts to call them failed.
• Fixed – Don't let `RecurringJobScheduler` to stall the pipeline when extension filters throw an exception.
• Fixed – Don't let `DelayedJobScheduler` to stall the pipeline when state filters throw an exception.
• Fixed – `JobLoadException` when new methods deployed, caused by overlapped recycles in ASP.NET applications.
• Fixed – Configuration changes aren't taken into account, caused by overlapped recycles in ASP.NET.
• Fixed – Zombie servers shown on the "Servers" page that aren't stopped automatically unless app pool is recycled.
• Fixed – Pass the whole exception to the `Error` field of a recurring job.
• Fixed – Re-schedule recurring jobs with unsupported versions, instead of stopping the pipeline.
• Fixed – Don't stumble over non-existing recurring jobs in a scheduler.
• Fixed – Add another check before removing non-existing jobs from delayed jobs to avoid race conditions.
• Fixed – Avoid throwing `NullReferenceException` instead of `InvalidOperationException` when deserializing a job.
• Fixed – Don't transform queue names to upper case in the Dashboard UI.

1.7.10

Hangfire.Core

• Added – Farsi translation for Dashboard UI (by @sepehr1101).
• Added – Portuguese translation for Dashboard UI (by @GeErghon).
• Added – `PrefixPath` in `DashboardOptions` (by @shenjielx).
• Added – Allow `PageUrl` to be overridden by subclass (by @brendonparker).

Hangfire.SqlServer

• Changed – Use `XACT_ABORT` option for `ExpirationManager` queries.
• Changed – Don't rely on implicit rollback when disposing transactions.
• Fixed – `NullReferenceException` in logs thrown from `SqlInternalTransaction.Rollback` method.

1.7.9

Hangfire.Core

• Fixed – Additional Chinese translation for Dashboard UI (by @brookqin).
• Fixed – Added `null` checks for expired failed jobs in Dashboard UI (by @ppkale1995-cimpress).
• Fixed – Add word break to definition lists for state cards in Dashboard UI.
• Fixed – Render long recurring job identifiers correctly in Dashboard UI.

Hangfire.SqlServer

• Changed – Implement long polling fetch for sub-second polling delays without `sp_getapplock`.
• Fixed – Don't leak `DbConnection` instance when an exception occurs during its opening.
• Fixed – Can not obtain connection from the pool exception after database was offline.
• Fixed – High number of waits in SQL Server when Hangfire Servers are idle.

Documentation

• Changed – Update "Making ASP.NET Applications Always Running" for .NET Core (by @unionthugface).
• Fixed – Fix typo in the README.md file (by @tawfikkh).

1.7.8

Hangfire.Core

• Added – `IGlobalConfiguration.UseResultsInContinuations` method to globally enable results for continuations.
• Added – Ability to push antecedent job's result to continuations via job parameters with `ContinuationsSupport`.
• Added – `JobParameterInjectionFilter` server filter to inject job parameters as arguments.
• Added – Allow to specify a custom thread factory in `UseBackgroundPool` methods.
• Changed – Add retry attempts for recurring jobs instead of immediately disabling them.
• Fixed – `CultureInfo.InvariantCulture` is now restored properly in background jobs.
• Fixed – Recurring jobs aren't triggered early after changing their cron expressions.
• Fixed – Don't trigger recurring job when it can't be scheduled due to errors.
• Fixed – Argument with a `null` value is skipped when displaying job arguments in Dashboard UI.
• Fixed – Add a workaround for resolving `System.Diagnostics.Debug` type in .NET Core 3.0.
• Deprecated – Deprecate the `JobActivatorScope.InnerScope` property as it wasn't implemented.

Hangfire.SqlServer

• Added – Support for Microsoft.Data.SqlClient package when using a custom connection factory (Part II).
• Fixed – Remove `System.Data.SqlClient` dependency from `SqlCommandBatch` and `ExpirationManager`.

Hangfire.AspNetCore

• Added – `IAppBuilder.MapHangfireDashboard` method for ASP.NET Core 3.0 endpoint routing (by @kendaleiv).
• Changed – Add explicit `netcoreapp3.0` target with "Microsoft.AspNetCore.App" framework reference (by @stebueh).

Hangfire.NetCore

• Changed – Add explicit `netcoreapp3.0` target with reference to "3.0.0" packages.

Documentation

• Added – Making ASP.NET Core application always running on IIS (by @bamotav).
• Fixed – Small typo on the "Getting Started in ASP.NET Core applications" page (by @msynk).
• Fixed – Small spelling correction in "Throttling & Rate Limiters" (by @Bert-R).
• Fixed – Small typo in the "Sending Email" tutorial (by @nabeelvalley).
• Fixed – Correct spelling of 'prerequisites' in README.md (by @lgirvin).

1.7.7

Hangfire.Core

• Changed – Produce a trace log message with details when updating a recurring job.
• Changed – Return early from `CoreBackgroundJobFactory.Create` when storage returns `null`.
• Project – Minor changes for the `Readme.md` file (by @231293).
• Project – Add `netcoreapp3.0` target framework for Hangfire.Core.Tests.
• Project – Add support for MSBuild 15.0 (VS 2019) when building `*.cshtml` files.

Dashboard UI

• Added – Allow modification of the Dashboard UI title (by @tbertenshaw).
• Added – Support for HTML tags on the Dashboard UI title (by @augustoproiete).
• Added – Buttons for 1,000 and 5,000 items per page in dashboard.
• Added – Links to previous/next pages to the top of the dashboard page.
• Changed – Expose the `RazorPage.Context` property as a public member.
• Fixed – Supplementary Chinese translation (by @mccj).
• Fixed – Don't update real-time chart when too much time passed since the last update.

Hangfire.SqlServer

• Added – Add support for Microsoft.Data.SqlClient package when using custom connection factory (Part I).
• Added – Add `UseFineGrainedLocks` option to avoid deadlocks in some theoretical cases.
• Added – Add missing overload for `UseSqlServerStorage` with connection factory parameter only.
• Added – Expose the SqlServerObjectsInstaller.GetInstallScript method (by @altso).
• Fixed – Make command batching working on .NET Core when using System.Data.SqlClient 4.7.0 and higher.
• Fixed – Permit dash characters (`-`) in schema names (by @kendaleiv).
• Fixed – Escape square bracket characters in schema names.
• Project – Add support for `netcoreapp3.0` target in Hangfire.SqlServer.Tests.
• Project – Take schema name from constant in Hangfire.SqlServer.Tests (by @kendaleiv).
• Project – Make Hangfire.SqlServer.Tests work on Linux in Travis CI environment.

Hangfire.AspNetCore

• Fixed – Add missing `AddHangfireServer` method for .NET Framework 4.6.1 and higher (by @danstur).

1.7.6

Hangfire.Core

• Changed – Add support for dash characters (`-`) in queue names (by @augustoproiete).
• Fixed – Show actual error in Dashboard UI when recurring job can't be scheduled.
• Fixed – Ensure backward compatibility when JSON payloads are serialized with field names only.
• Fixed – Non-awaited continuations can bring down the whole app when `TaskScheduler` is set to `null`.
• Fixed – Timeout value is not respected in some cases in the `WaitOneAsync` method.

1.7.5

Hangfire.Core

• Fixed – Show error message when there's an error loading the statistics in Dashboard UI (by @prochnowc).
• Fixed – Properly handle recurring jobs with null or empty 'Job' field.
• Fixed – Disable recurring job when we can't schedule it due to an error.
• Fixed – Use `LazyThreadSafetyMode.PublicationOnly` to avoid caching "JobStorage.Current is null" exceptions.

Hangfire.AspNetCore & Hangfire.NetCore

• Fixed – Add missing overload for the `AddHangfireServer` method with "options" action.

1.7.4

Hangfire.Core

• Added – `BackgroundJobClient.RetryAttempts` property to make job creation resilient to transient exceptions.
• Added – Dashboard localization support in `pt-BR` (by @candidodmv).
• Changed – Protect background dispatchers from moving from stopped state to non-stopped one.
• Changed – Unify `WaitOne` and `WaitOneAsync` methods with timeout and cancellation token for `WaitHandle` class.
• Fixed – Don't hide an original fatal exception occurred in dispatchers in some cases.
• Fixed – Dashboard UI to display "await" keyword on all task-like methods.
• Fixed – Display links properly in an informational message on the Servers page in Dashboard UI.
• Fixed – Wait for the heartbeat process before shutting down a server.

Hangfire.SqlServer

• Fixed – Potential deadlocks cause by suboptimal queries when using `SlidingInvisibilityTimeout` fetching.
• Fixed – Prevent zero delays between fetch retry attempts when lock acquisition failed without blocking.
• Fixed – Specify float precision explicitly for the `Score` column in the `AddToSet` method.

1.7.3

Hangfire.Core

• SECURITY – Use `HtmlEncode` in all remaining places in Dashboard UI to prevent XSS attacks.

• Added – Added Dutch language, and updated missing translation on "Servers" page (by @r-win).
• Added – `Cron.Never` method for adding manual recurring jobs that never fire (by @michaltalaga).
• Fixed – Add missing `AddOrUpdate` extension methods for the `IRecurringJobManager` interface.
• Deprecated – Unused `HtmlHelper.FormatProperties` method is now obsolete.

Hangfire.SqlServer

• Fixed – Wrong error message in migration script, when @CurrentSchemaVersion has a NULL value (by @penenkel).

1.7.2

Hangfire.Core

• Added – `DashboardOptions.TimeZoneResolver` property to handle custom time zone resolvers in Dashboard UI.
• Fixed – `RecurringJob.AddOrUpdate` method is now able to update a broken recurring job.
• Fixed – Recurring job scheduler now properly handles recurring jobs whose job method or time zone is wrong.
• Fixed – Don't throw an exception on Recurring Jobs page when time zone can't be resolved.

Hangfire.AspNetCore & Hangfire.NetCore

• Added – Automatically resolve `ITimeZoneResolver` service for the `DashboardOptions.TimeZoneResolver` property.
• Fixed – Allow to resolve `IJobFilterProvider` service from the `AddHangfire` method.

Hangfire.SqlServer

• Fixed – Occasional "DataException: Error parsing column" error when using blocking fetch.

1.7.1

Hangfire.Core

• Added – `DashboardOptions.IgnoreAntiforgeryToken` property to disable token validation in Dashboard UI.
• Added – Display hints regarding server status on Servers page in Dashboard UI.
• Added – Highlight recurring jobs with no next execution in Dashboard UI.
• Added – Show actual error in Dashboard UI when recurring job has an invalid Cron expression.
• Fixed – `InvalidOperationException` when `AllowSynchronousIO` option isn't set in ASP.NET Core 3.0.
• Fixed – Set `NextExecution` value to `null` when existing recurring job has an invalid Cron expression.
• Fixed – Make dashboard charts to be more culture-specific to use correct time format.
• Fixed – Obsolete `UseSerializationSettings` comment now contains correct method name (by @PaitoAnderson).
• Project – `resx` files now re-generated automatically when building a project.

Hangfire.NetCore

• Added – Worker Service host support for .NET Core without unnecessary dependencies to ASP.NET Core.

Hangfire.SqlServer

• Changed – Use blocking fetch implementation only for sub-second polling intervals.
• Fixed – Don't fail with an exception when can't connect to MSSQL instance during start-up.
• Fixed – Don't access the `JobQueue` table when using blocking query and don't have results.

1.7.0

Hangfire.Core

• Added – Full .NET Core 2.0 support by explicitly targeting .NET Standard 2.0.
• Added – `IGlobalConfiguration.SetDataCompatibilityLevel` to enable rolling upgrades from version 1.6.
• Added – `IGlobalConfiguration.UseRecommendedSerializerSettings` method for new installations.
• Added – Assemblies now loaded automatically when resolving a type when using default type resolver.
• Added – Custom `TaskScheduler` can now be specified in `BackgroundJobServerOptions` for workers.
• Added – `IdempotentCompletionAttribute` filter to enforce strict order for continuations.
• Added – `IBackgroundJobClient.ContinueJobWith` methods to replace `ContinueWith` ones in future for clarity.
• Added – `JobStorage.LinearizableReads` virtual property to avoid unnecessary waits in state changer.
• Added – Allow async methods to run their continuations on worker thread by disabling `TaskScheduler`.
• Added – Multi-stage shutdown to wait for graceful completion before starting to abort jobs.
• Added – Asynchronous checks for job cancellation, `IJobCancellationToken` can be replaced with `CancellationToken` (by @pieceofsummer).
• Added – Possibility to create millions of recurring jobs without stressing the scheduler.
• Added – Second-based recurring jobs are fully supported now with 6-part cron expressions.
• Added – Support for custom `TimeZoneInfo` resolvers in recurring jobs for interoperability purposes.
• Added – Package now explicitly targets .NET Standard 2.0, and .NET Framework 4.6 target added as well.
• Added – Type roundtrip support between .NET Core and .NET Framework for most common types.
• Added – Allow to specify queue names based on job arguments with `QueueAttribute` via patterns.
• Added – `PerformContext.Storage` property to allow server filters to spawn connections.
• Added – `GetFirstByLowestScoreFromSet` connection method overload that returns multiple items (by @cdschneider).
• Added – Entry point for custom job naming strategies available for dashboard (by @pieceofsummer).
• Added – `JobDisplayNameAttribute` class for displaying jobs in dashboard, available on .NET Core (by @pieceofsummer).
• Added – Support for async jobs returning ValueTask<T> (by @pieceofsummer).
• Added – Support for asynchronous background processes, opens the road toward async storage.
• Added – Circuit breaker pattern for background processes to reduce the logging pressure.
• Added – Processing server is now able to detect it was expired, and restart itself with the new id.
• Added – Ability to use custom delays for automatic retries of a background job.
• Added – `ThreadAbortException` and `ThreadInterruptedException` handling to keep the background process running.
• Added – Support for complex Cron expressions, including the `L`, `W`, `#` characters.
• Added – `JobActivator.BeginScope` method overload with the full `PerformContext` (by @jeroenvervaeke).
• Added – Support for read-only view for dashboard (by @mikechamberlain).
• Added – Storage property to control the job expiration time (by @rsilvanet).
• Added – Decrease the size of serialized type payloads and remove version information.
• Changed – Make `TaskScheduler.Default` the default scheduler for async jobs to avoid breaking changes.
• Changed – Split serializer setting to Internal and User scopes to isolate them (Version_170 Switch).
• Changed – Don't allow to affect internal serialization even by `JsonConvert.DefaultSettings` (Version_170 Switch).
• Changed – Share the same type binder between Hangfire itself and Newtonsoft.Json (Version_170 Switch).
• Changed – Use more compact representation of dates when using `SerializeDateTime` (Version_170 Switch).
• Changed – Stop using special case for `DateTime` argument serialization (Version_170 Switch).
• Changed – Don't serialize unused `AwaitingState.Expiration` field (Version_170 Switch).
• Changed – Specify parameter type when serializing arguments to allow using `TypeNameHandling.Auto` option.
• Changed – Use case sensitive search when resolving a type as by default in .NET.
• Changed – Make `SucceededState` constructor public to allow state serialization.
• Changed – Add `IBackgroundJobFactory.StateMachine` property (breaking change for low level API).
• Changed – Replace Rickshaw with Chart.js to have beautiful charts with less headache.
• Changed – `DelayedJobScheduler` is able to use the new storage method to query multiple jobs at once.
• Changed – `RecurringJobScheduler` now uses index-based checks to fetch only those jobs that should be scheduled.
• Fixed – Worker now logs an error, when all the state change attempts failed due to an exception.
• Fixed – Don't serialize arguments multiple times when showing job details in dashboard.
• Fixed – `DateTimeOffset` conversion error when it was serialized with `TypeConverter`.
• Fixed – Remove duplicate of argument deserialization code for obsolete `Job` class methods.
• Fixed – Decorate all the exceptions with the `SerializableAttribute`.
• Fixed – `ArgumentNullException` when job class contains method with non-resolvable generic arguments.
• Fixed – "Failed to initialize CoreCLR" error, by removing reference to `Microsoft.NETCore.Portable.Compatibility`.
• Fixed – Possible race conditions in `RecurringJobScheduler` that may lead to job duplicates.
• Fixed – Configuration inconsistency introduced in 1.6.18 leading to issues with custom `JobActivator`.
• Fixed – Triggering the recurring task doesn't update its last execution time.
• Fixed – Recurring job which don't have next execution (intentionally or not) don't cause exception.
• Fixed – Dashboard recurring jobs sorting is random (now it's based on next execution time).
• Fixed – Performance problems with huge amount of recurring jobs.
• Fixed – `NextExecution` field of a recurring job has delay in value getting set.
• Fixed – Dashboard graphs have improper sizing.
• Fixed – Server disappears from the list, but still performing the background processing.
• Fixed – Logging is too aggressive on transient errors.
• Fixed – Daylight saving time transitions now handled perfectly in recurring jobs thanks to Cronos.
• Fixed – Confusing Cron scheduling, when both day-of-week and day-of-month fields set.
• Project – Add `DataCompatibilityRangeFact` and `DataCompatibilityRangeTheory` classes for compatibility checks.
• Project – Reduce test execution time by removing unnecessary waits.

Hangfire.AspNetCore

• Added – Full .NET Core 2.0 support by explicitly targeting .NET Standard 2.0.
• Added – An overloaded AddHangfire method with `IServiceProvider` parameter (by @ericgreenmix and @denis-ivanov).
• Added – `BackgroundJobServerHostedService` class based on `IHostedService` interface.
• Added – `IServiceCollection.AddHangfireServer` method to register the server during configuration.
• Changed – Custom services for factory, performer and state changer interfaces will be picked up only when all of them registered.

Hangfire.SqlServer

• Added – Full .NET Core 2.0 support by explicitly targeting .NET Standard 2.0.
• Added – `Schema 7` migration to fix the `IX_HangFire_Set_Score` index to include the `Key` column.
• Added – `Schema 6` migration with less indexes, better physical layout and `bigint` support (disabled by default).
• Added – Blocking fetch support for sliding expiration-based fetch to avoid excessive polling.
• Added – `SqlServerStorageOptions.EnableHeavyMigrations` switch to automatically install even heavy migrations.
• Added – `SqlServerStorageOptions.DisableGlobalLocks` property to avoid custom locking scheme.
• Added – `SqlServerStorageOptions.UsePageLocksOnDequeue` property to use less CPU consuming fetch.
• Added – Callback method to allow to open the database with impersonation (by @BjoernHund).
• Added – `SqlServerStorageOptions.UseRecommendedIsolationLevel` option to set the minimum possible level.
• Changed – Identity columns either converted to the `bigint` type, or entirely removed.
• Changed – Clustered indexes were organized according to the access patterns of their tables.
• Changed – Most of secondary indexes were either removed or made filtered.
• Changed – Optimize sliding-expiration-based fetching to use even less CPU time.
• Changed – Use write reordering and fine-grained locking scheme to improve parallelism.
• Changed – Monitoring API doesn't check state data to see state transition time.
• Changed – Allow to use zero-based poll interval when sliding invisibility timeout.
• Changed – Short paths for the `CreateExpiredJob` method to avoid some round-trips.
• Changed – Set `SqlParameter` types explicitly to not to duplicate query plans.
• Changed – Batch support for `AddToQueue` method when default provider is used.
• Changed – Check `FetchedAt` has expected value to prevent prolonging others' work.
• Changed – Use more recent Dapper 1.50.7 on all platforms except .NET Framework 4.5.
• Changed – Dapper package is internalized now even on .NET Core to avoid possible conflicts.
• Fixed – Avoid unnecessary waits in state changer when job was already expired.
• Fixed – Cannot resolve the collation conflict in `CountersAggregator`.
• Fixed – Background processing stops when identity columns exceed the `Int32.MaxValue`.
• Fixed – Slowdown of scheduled jobs due to the missing index on the `[Set]` table.