Solve With Software

.NET Core and early .NET upgrades

An application on .NET Core 2.1 or 3.1, or on .NET 5, 6 or 7, runs on a version Microsoft no longer patches, and .NET 8 and 9 join them on 10 November 2026. It's the same platform as .NET 10, so the upgrade is done in place, one version step at a time, with the breaking changes at each step fixed as they appear. Solve With Software takes over the code, gets it building on a current machine, moves it to .NET 10 and modernises what the upgrade exposes, on a fixed price from the assessment.

Book a free consultation

Free · 1 hour · no obligation

Where the versions stand

Microsoft ships a new .NET every November. Even-numbered releases are long-term support and get three years; odd-numbered ones get two. An application built by a contractor in 2019 or 2021 is usually on whichever version was current that month, and nobody has moved it since.

VersionSupport ended, or ends
.NET Core 2.1August 2021
.NET Core 2.2December 2019
.NET Core 3.1December 2022
.NET 5May 2022
.NET 6November 2024
.NET 7May 2024
.NET 810 November 2026
.NET 910 November 2026
.NET 10 (current, LTS)November 2028

Finding out which you're on takes a minute: the TargetFramework line in each project file reads netcoreapp3.1, net6.0, net8.0 and so on. The assessment reads every project file and lists them.

Why this is a different job from .NET Framework

.NET Framework applications are stuck because Web Forms and WCF were never carried forward, so parts of them have to be rebuilt. Nothing like that applies here. .NET Core 3.1, .NET 6 and .NET 10 are the same platform at different ages. ASP.NET Core MVC, Razor Pages, Web API, Blazor, worker services and Entity Framework Core all exist on .NET 10 in recognisable form.

So the upgrade is a change of target framework, a round of package updates, and a list of breaking changes to work through, one version step at a time. What takes the time is the list: what changed between the version you're on and the version you're going to, and what in your code touched it.

What breaks at each step

The recurring ones, from applications we've moved:

  • 2.x to 3.x. The hosting model changed and endpoint routing arrived. Newtonsoft.Json stopped being the default serialiser in favour of System.Text.Json, which handles dates, enums and case differently. Entity Framework Core 3 stopped silently running parts of a query in memory, so queries that used to work started throwing.
  • 3.1 to 6. Mostly smooth. Nullable reference types and the minimal hosting model are optional and worth adopting. Packages that stopped at 3.1 need replacing.
  • 6 to 8 and 10. The application code barely notices. The packages do. IdentityServer4, which a lot of applications of the era used for login, ended support in November 2022 and its successor is commercially licensed. MediatR and AutoMapper moved to commercial licences in 2025, free below a team-size threshold. Each is a decision: pay, replace, or in the case of login, move to ASP.NET Core Identity.
  • Anywhere. Windows-only APIs that need a flag or a replacement if the target is Linux. An EF Core migration history that nobody has run from the start. A build that only ever worked on the contractor's machine because the SDK version was never pinned.

None of these is a rewrite. Each is a known change with a known fix, and the assessment lists which ones apply before the price is set.

The staged path

  1. Get it building. The right SDK pinned in a global.json, packages restoring, the solution compiling on a clean machine. This is where an unpinned SDK or a package that has vanished from NuGet shows up.
  2. Safety net. Source control, a test environment, a staging environment, and tests around the processes that matter, before any version changes.
  3. Step the version. One long-term release at a time for an old application (3.1 to 6, 6 to 8, 8 to 10), or straight to 10 for a small one. Fix the breaking changes at each step, run the tests, move on.
  4. Replace what stopped. The packages that ended at an old version, the login library, the licences that changed.
  5. Test the data layer. EF Core generates different SQL after an upgrade. Queries run against a copy, then in staging against the live schema.
  6. Deploy to hosting you own. The IIS hosting bundle on a current Windows Server, or Linux, or a container, decided on cost and what else you run.

Each stage has its own fixed price, and each ends with the application running on a supported version.

Your data

Usually SQL Server or PostgreSQL, and it stays where it is. The upgrade changes the code that talks to it, so the data layer never meets a change until the change has proven itself somewhere else: tested against a copy in a test environment, then run in staging against the live schema with results reconciled, before anything connects to live.

Can this be done gradually?

Yes. A single web application upgrades in version steps, each of which leaves it running and can be deployed on its own. A system made of several services moves one service at a time, with the rest untouched until their turn. Where a solution mixes .NET Framework and .NET Core projects, the Framework page covers the other half and the two plans run together.

What it costs

The assessment is from £395 + VAT, sized on a free one-hour consultation, with an exact price before you commit. For a .NET Core application it reads every project file and package reference, confirms whether the solution builds, lists the breaking changes between your version and .NET 10, and prices the steps as fixed numbers. What drives the price and the payment terms each have a page.

The risks of waiting

The date, first: .NET 8 and .NET 9 both end on 10 November 2026, so an application that felt current in 2024 is about to be unpatched. Then the compounding. Every version skipped adds a step and a set of breaking changes to the eventual upgrade, and each year more packages drop the old target frameworks. And an unpatched web application facing the internet is the one part of the estate an insurer or a customer's security questionnaire will ask about.

How we approach it

Get it building, put the safety net under it, step the version, replace what stopped, test the data layer. Marc Allington builds on modern .NET now and has taken applications through these version steps, so the breaking changes are familiar. Everything we build runs on open, widely used technology, in your own accounts, with full source code and ownership transferring to you on final payment.

The technical checklist for a .NET Core application

CheckWhy it matters
Target framework of every project, and whether the solution builds on a clean machineSets the number of version steps. If it doesn't build, that's stage one.
Application types: MVC, Razor Pages, Web API, Blazor, worker services, consoleAll carry forward; the mix decides where the breaking changes land.
Package references, and which ended at an old version or changed licenceThe dead and the newly commercial packages are where the decisions are.
Login: ASP.NET Core Identity, IdentityServer4, an external providerIdentityServer4 is unsupported since 2022; its replacement is a decision, not a package bump.
Data access: EF Core version, migrations history, raw SQLEF Core changes its generated SQL between versions; the migrations have to run from scratch in test.
Serialisation: Newtonsoft.Json or System.Text.Json, and which behaviours the code relies onThe most common source of subtle breakage across 2.x to 3.x.
Hosting: IIS, Windows service, Linux, container, and which Windows ServerSets the deployment target and whether Windows-only APIs matter.
Tests, source control, build pipeline, pinned SDKThe safety net comes before any version step.

Each answer goes into the report with its step, its consequence and a fixed price.

Questions

What people ask before they book.

Is .NET 8 still supported?

Until 10 November 2026. .NET 9 ends the same day, because Microsoft extended its short-term releases to two years. .NET 10 is the long-term release to be on, supported to November 2028.

Small application, straight to 10. Larger or older application, one long-term release at a time, because each step has its own breaking changes and it's easier to find which one broke a behaviour when only one has changed. The assessment says which applies.

No. .NET Core and .NET 10 are the same platform, so MVC, Razor Pages, Web API, Blazor and EF Core all carry forward. The work is package updates and breaking changes, not rebuilding pages. A solution that also has .NET Framework projects has its own page.

Older, and unsupported since December 2019, so more steps and the 2.x to 3.x changes to work through first. The path is the same shape: get it building, safety net, then step the versions.

It depends on how many version steps there are and which packages stopped along the way, which the assessment counts. The shape is the usual one: the application running on a supported version within about six weeks, then each further step priced before you commit.

Start with a free consultation

An hour on your system, online or by phone. From there we size the assessment, from £395 + VAT, and give you an exact price before you commit.

Want the numbers first? See how pricing works.

Written by Marc Allington, founder. .