Editja

Overview of upgrading .NET apps

This article explains how to plan and perform upgrades of .NET applications. It helps you assess your current app, choose the right upgrade path, use the available tooling, and validate the upgraded app. Use the guidance to upgrade from .NET Framework to modern .NET, move to the latest .NET release, or modernize your app for cloud and containers.

When to upgrade

Consider upgrading when business or technical signals show clear value:

  • .NET or other dependencies reach end of support.
  • New security vulnerabilities are discovered or you must meet new compliance requirements.
  • You face performance or scalability limits that newer .NET versions address.

Upgrading is also a good opportunity to modernize your app. For example, you could containerize your app, move a component to a cloud-native service, or apply cloud patterns that improve reliability and operability. Upgrading also increases developer productivity by enabling newer SDKs, templates, and language features that simplify development and reduce maintenance.

Prioritize upgrades by risk and return: run a targeted assessment, pilot the changes on a low-risk project, and use the results to plan broader migrations.

.NET release lifecycle

.NET releases a new major version yearly, alternating between standard-term support (STS) and long-term support (LTS) releases. Each release has a defined support window, after which it no longer receives security and quality updates. Plan your upgrade cadence around these dates so your apps stay on a supported version:

  • LTS releases are supported for three years and are the typical choice for production apps that prefer stability.
  • STS releases are supported for 18 months and are useful when you want to adopt new features sooner.

For supported versions, end-of-support dates, and patching guidance, see .NET releases, patches, and support and the .NET and .NET Framework support policy.

The .NET SDK can target older versions of .NET, which you might need if you deploy to a hosting service that doesn't yet support the latest runtime. Keep your developer tools up to date because each release addresses security vulnerabilities and adds compatibility with new technologies.

Choose an upgrade path

Most upgrades fall into one of the following categories. Start with the guidance that matches your scenario, then use the tooling described later in this article to perform the work.

The GitHub Copilot app modernization agent provides an AI-assisted, end-to-end experience that speeds porting and modernization work. The agent analyzes your project and writes a plan to complete your desired upgrade. You can adjust and iterate on the plan, then perform the upgrades. With this agent, you can:

  • Upgrade projects to a newer .NET version.
  • Assess your application's code, configuration, and dependencies.
  • Migrate projects from older .NET versions to the latest release.
  • Migrate technologies your app depends on to Azure.
  • Plan and provision the right Azure resources.
  • Fix issues and apply cloud-migration best practices.
  • Validate that your app builds and that tests pass.

Use the agent when you want a guided, AI-powered path to assess, remediate, and modernize codebases—particularly for projects that have many dependencies, rely on Windows-specific APIs, or that you plan to containerize or migrate to the cloud. For more information, see What is GitHub Copilot app modernization.

.NET Upgrade Assistant (deprecated)

.NET Upgrade Assistant is a Visual Studio extension and CLI tool that analyzes a project and applies common upgrade changes. It's officially deprecated in favor of the GitHub Copilot app modernization agent and is no longer actively developed. Use it only if you can't use the modernization agent—for example, if your environment doesn't have access to GitHub Copilot. New work should target the modernization agent instead.

Next steps