• Blog
  • Comprehensive Guide to Migrating from .NET Core 3.1 to 6

Comprehensive Guide to Migrating from .NET Core 3.1 to 6

Migration steps

Publish date:
Discover more of what matters to you


In today’s world of software development it’s crucial to keep your frameworks current to maximize efficiency and make use of the features. This manual serves as a guide for developers seeking to upgrading .NET core 3.1 to 6.

This migration not only enhances performance and introduces functionalities but also expands support for your applications. This guide will outline the prerequisites, tools and a detailed migration plan to ensure a transition from Dotnet 3.1 to 6.

Where and How to Start?

Before making the shift from .NET Core 3.1 to .NET 6 it’s crucial to ensure that your development setup is properly configured. In this guide we will discuss the compatibility criteria for operating systems and development software, installation of the essential .NET 6 packages and the significance of backing up your projects.

Migration of Delphi to .NET
Check out our article
Check out

Environment Setup

To have an upgrade process and handle any issues effectively it’s important to set up your development environment for transitioning to.NET 6. Here are the key preparations you should make:

  • Check operating system compatibility. Make sure your system is compatible with .NET 6 by running on Windows 10 version 1607 or newer macOS 10.13 or later or a supported Linux version. Meeting these OS requirements is essential for software performance.
  • Set up Visual Studio. If you’re using Visual Studio ensure that you have either Visual Studio 2019 version 16.8 or later or Visual Studio 2022 installed on your machine. Having these versions is critical as they provide the support and integration with .NET 6 offering project templates and debugging tools
  • Install .NET 6 SDK. Download and install the .NET 6 SDK from Microsoft’s website to access all the tools required for developing applications with .NET 6, including the runtime and command line utilities.

Ensuring that your operating system, Visual Studio version, and .NET 6 SDK are up-to-date and compatible will lay a solid foundation for a successful .NET core migration from 3.1 to 6. 

Check out our migration services
We always look for a really effective approach, try to predict and manage the risks that may appear in 1, 3, 5 years from now
Check out

Tools for Migration

Utilizing the right tools can make the migration process smoother and more manageable. Here are some essential tools for upgrading Dotnet 3.1 to 6:

  • .NET upgrade assistant. This tool is designed to help automate the upgrade of .NET projects to newer versions, providing step-by-step guidance and performing many routine tasks automatically.
  • Visual Studio. Known for its robust development features, Visual Studio supports .NET 6 comprehensively, offering tools for editing, building, and debugging .NET applications.
  • NuGet package manager. An instrument for handling libraries and packages in .NET projects, it assists in updating and installing the versions of packages that work well with .NET 6. 

These utilities do not only just support a transition, but also contribute to preserving the reliability and effectiveness of your applications as you upgrade to Dotnet 6.

Steps to Migrate from ASP.NET Core 3.1 to .NET 6.0

Migrating your ASP.NET Core 3.1 project to ASP.NET Core 6.0 involves several crucial steps that ensure your application leverages the enhanced capabilities of the newer framework version. 

Here’s a step-by-step guide on how to perform .NET 6 migration effectively.

Update .NET SDK Version in global.json

Update .NET SDK Version in global.json

What to do?

If your project specifies a .NET SDK version using a global.json file, you need to update this version to match the installed .NET 6.0 SDK version.

How to do?

Locate the global.json file in your project directory and modify the version property to 6.0.100 or the specific version of the .NET 6 SDK you have installed.


{ “sdk”: { “version”: “6.0.100” } }

Expected result

This change will ensure that your project uses .NET 6 SDK for all operations. Verify by running dotnet –version in your project directory to see the SDK version in use.

Update the Target Framework

Update the Target Framework

What to do?

Update the Target Framework Moniker (TFM) in your project file to net 6.0.

How to do?

Open your project file (.csproj) and update the <TargetFramework> element from netcoreapp3.1 to net 6.0.


<Project Sdk=”Microsoft.NET.Sdk.Web”> <PropertyGroup><TargetFramework>net6.0</TargetFramework> </PropertyGroup> </Project>

Expected result

The project now targets .NET 6 upgrade, which can be confirmed by the absence of build errors related to incompatible framework versions.

Update Package References

Update Package References

What to do?

Upgrade your NuGet package references to versions compatible with .NET 6.

How to do?

Edit your project file and update the versions of all Microsoft and third-party packages to their respective versions that support .NET 6. For instance:


<ItemGroup> <PackageReference Include=”Microsoft.AspNetCore.JsonPatch” Version=”6.0.0″ /><PackageReference Include=”Microsoft.EntityFrameworkCore.Tools” Version=”6.0.0″ /><PackageReference Include=”Microsoft.Extensions.Caching.Abstractions” Version=”6.0.0″ /><PackageReference Include=”System.Net.Http.Json” Version=”6.0.0″ /> </ItemGroup>

Expected result

All project dependencies are now compatible with .NET 6. Verify by ensuring the project builds successfully without package compatibility issues.

Delete bin and obj folders

What to do?

Remove the bin and obj directories to clear old build outputs and ensure a clean build environment.

How to do?

Delete these folders manually or use the command line:


dotnet nuget locals all –clear

Expected result

With cleared build caches and directories, your upgrade project to .NET 6 should not retain any stale artifacts that could conflict with the migration process.

Update Docker Images

What to do?

If your application is containerized, update your Dockerfile to use the .NET 6 runtime images.

How to do?

Below is how you can update your Docker pull command to reflect these changes:

– Docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1 

+ docker pull mcr.microsoft.com/dotnet/aspnet:6.0

What to expect?

Previously, Docker images were stored under the mcr.microsoft.com/dotnet/core repository. With .NET 5 and beyond, including .NET 6, images have been relocated to mcr.microsoft.com/dotnet

Additional Considerations

As you approach the stages of .NET core 3.1 to .NET 6 Migration it’s essential to consider factors that may impact the performance and compatibility of your application.

  • Razor class libraries (RCLs). Update RCLs to target net6.0 and update other package references as necessary.
  • Model binding changes. Address any changes in model binding behavior, especially for DateTime values, to ensure they are bound as expected.
  • Update deprecated APIs. Review the Microsoft documentation for deprecated APIs and their alternatives. For instance, if you are using JSON serialization, switch from Newtonsoft.Json to System.Text.Json

By following these steps, you will effectively upgrade .NET core 3.1 to .NET 6, leveraging the latest improvements and features offered by the updated framework.

Migration of a desktop ERP system from Windows Forms to .NET 6
Check out a case study from our practice
Check out

.NET core migration from 3.1 to 6 is a significant enhancement for any development project, offering improved performance, extended support, and new programming capabilities. For additional guidance and support during your migration process, consult these resources:

By following the detailed steps outlined in this guide, developers can ensure a smooth transition and maintain robust, modern applications.

.NET Core 3.1 to .NET 6 Migration Checklist

This checklist provides a step-by-step guide to ensure every aspect of the upgrading from .NET core 3.1 to .NET 6 is addressed:

  • Ensure that your global.json file (if present) specifies the .NET 6 SDK version.
  • Modify the project file to change the <TargetFramework> element from netcoreapp3.1 to net6.0.
  • Upgrade all NuGet packages for compliance .NET 6.
  • Rebuild the project to ensure that there are no compilation errors.
  • Delete bin and obj directories. 
  • Update docker configuration. 
  • Razor class libraries (RCLs) update. 
  • Review model binding changes. 
  • Conduct testing. 

Making sure you go through the checklist mentioned above guarantees that your .NET 3.1 to .NET 6 migration is comprehensive addressing any issues. This process verifies that your software is not just upgraded to the technology but fine tuned for improved performance and security.

Subscribe to our newsletter and get amazing content right in your inbox.

This field is required
This field is required Invalid email address
By submitting data, I agree to the Privacy Policy

Thank you for subscribing!
See you soon... in your inbox!

confirm your subscription, make sure to check your promotions/spam folder

Subscribe to our newsletter and get amazing content right in your inbox.

You can unsubscribe from the newsletter at any time

This field is required
This field is required Invalid email address

You're almost there...

A confirmation was sent to your email

confirm your subscription, make sure to check
your promotions/spam folder