Most .NET work in 2026
is not greenfield.
Hire for the migration too.
C# engineers who are fluent in .NET 8 and patient with what came before — Web Forms, WCF, a Windows service nobody has opened since 2016. Full-time in your team, on the Virtus payroll, from $30 an hour.
- $30–52
- per hour
- 6–10 days
- to day one
Six rungs, and what breaks on each
You do not have to climb all of it. Most clients stop at rung four and are perfectly happy there — the point of writing it down is that you choose where to stop, rather than discovering it halfway.
.NET Framework 4.8
Where you probably areWindows-only, IIS-bound, no support for the container tooling your platform team standardised on two years ago. Still supported, but going nowhere.
Inventory & analysers
Know the actual sizeNothing yet. Run the upgrade assistant and the API portability analyser, and list every dependency with no .NET 8 story. Most projects discover two blockers, not twenty.
Retarget the libraries
.NET Standard 2.0 coreAnything touching System.Web, App Domains, WCF server, or a COM interop nobody remembers writing. This is where the real work is.
Port the host
ASP.NET Core on .NET 8Global.asax, HttpContext.Current, Web.config transforms, and every place someone reached for a static. Config, DI and middleware all change shape.
Containerise
Linux, Kubernetes, real CIPath separators, case-sensitive file systems, Windows-specific crypto and any scheduled task that was really a Windows service.
Modernise inside
Minimal APIs, EF Core, AOTNothing forced. This is the part you do a slice at a time, once the platform underneath stops being the constraint.
And when there is nothing to migrate
ASP.NET Core services
Minimal APIs or MVC, typed configuration, health checks, OpenAPI generated rather than hand-written.
EF Core done properly
Migrations in source control, no lazy loading in a loop, and the generated SQL actually read before it ships.
Azure-native
App Service or Container Apps, Key Vault, Service Bus, Managed Identity instead of a connection string in a config file.
Blazor where it fits
Server or WebAssembly, chosen for the latency profile rather than the demo — and not proposed where React is the better answer.
Testing that means something
xUnit, Testcontainers against a real SQL Server, and integration tests through WebApplicationFactory.
Observability
OpenTelemetry, structured logs with Serilog, and correlation ids that survive a Service Bus hop.
Migration work is senior work
A mid-level engineer is good value for feature work in a modern codebase. Give the Framework port to someone who has done one before — the mistakes are expensive and mostly invisible until production.
Mid-level
3–5 yrs$30–36/hrShips features in an ASP.NET Core codebase with review. Comfortable with EF Core and DI.
Senior
5–8 yrs$36–46/hrOwns a service, leads a migration slice, and is the person who reads the generated SQL.
Lead / Architect
8+ yrs$46–62/hrPlans the whole migration, sets service boundaries, and negotiates the Windows-only dependencies.
Send us your .csproj files
That is genuinely enough to tell you which rung you are on and roughly what the next one costs. No charge for the read.
