February 15th, 2023

Upgrading your .NET projects with Visual Studio

Olia Gavrysh
Senior Product Manager

Now you can upgrade any .NET application to the latest version of .NET inside of Visual Studio! We are happy to introduce it as a Visual Studio extension and will upgrade your .NET Framework or .NET Core web- and desktop apps. Some project types are in development and coming soon, see the details below.

Download Get Upgrade Assistant VS extension

Why upgrade and to what version?

If your applications are built for .NET Framework or .NET Core, now is a great time to upgrade them to .NET 6 (Long Term Support version) or .NET 7 (Standard Term Support version) that have much better performance and give you access to the latest features and capabilities. There have been huge improvements between .NET Framework and the latest .NET, but even if you’re targeting .NET Core 3.1 or earlier, it has reached the end of support in December 2022.

We recommend to port to .NET 6 or .NET 7!

Between those two, .NET 6 has longer support time and .NET 7 is the latest, so has newer features. We release a new version of .NET every year in November and every even version number is supported for 3 years (Long Term Support, or LTS for short). So, you can either stay on the latest cutting-edge tech and upgrade every year, or switch from LTS to LTS once every 2-3 years.

About Upgrade Assistant

Upgrading your application, especially from .NET Framework, was a complicated process. We kept prototyping and improving in this area to simplify your upgrades. In the past, you might have used the Upgrade Assistant CLI tool or Microsoft Project Migrations. We have collected your feedback, big thanks to everyone who filled in our survey or left us comments, created issues and feature requests! To address your feedback, we concluded that we needed to provide a unified upgrade experience for every project type inside of Visual Studio.

Now you will be able to upgrade every type of .NET application from any initial version (.NET Framework or .NET Core) by right-clicking on your project in Solution Explorer and choose “Upgrade”. Don’t forget to install the extension first.

The general philosophy of Upgrade Assistant is that it will take care of the mechanics, but depending on what framework and project type you’re upgrading from, you should expect to do some manual post processing. While we try to automatically fix breaking changes, it cannot detect and fix all of them. So you might need to make some additional modifications to get the code to compile and you need to test thoroughly to ensure your code continues to work as expected.

Supported application types

We have a goal to support every .NET project type. Also, we think of this tool not just as a one-time upgrade from .NET Framework to .NET 6/7, but as the way to upgrade your application to the latest .NET in the future as well. Besides changing the target framework version, the tool will be able to modify your code to fix breaking changes. These are our plans for the future, and currently here is what the tool supports in the latest version:

Supported

  • ASP.NET
  • Class libraries
  • Console
  • WPF
  • WinForms

These workloads are at parity with Upgrade Assistant CLI tool.

Coming soon

  • Xamarin to .NET MAUI migration
  • UWP to WinUI migration
  • WCF to WCF Core migration

Those migration types are in development, and you already can upgrade these projects, but we don’t have the code fixers for these projects yet. If you need to migrate these project types today, we recommend using the existing Upgrade Assistant command line tool, which already has code fixers. The Visual Studio extension will get them soon too.

Different upgrade types

Upgrade assistant supports 3 upgrade types. Different types are recommended for different project types, so you will see only those options that would work well for your app.

  • In-place. In this case your original project will be upgraded all at once. If you are using source control and prefer to manage the copies yourself, for example, by using branches, this option is for you.
  • Side-by-side. With this option your original project will be untouched, and a copy of it will be added to the solution which will contain the upgraded code. This type can be handy if your application has many dependencies that might be broken after the upgrade. This way you can check-in your progress and not worry about the application not building.
  • Side-by-side incremental. This is the ideal choice for web applications. Upgrade from ASP.NET to ASP.NET Core requires a lot of work and at times manual refactoring (because these two technologies are very different). Class Libraries are often used together with web apps, so we enable this type of upgrade for Class Libraries as well. Incremental upgrade will put a .NET 6/7 project next to your existing .NET Framework project and route endpoints that are implemented in the .NET 6/7 project there, while all other calls will be sent to .NET Framework application. This way you can combine upgrade with feature development and move your items to .NET 6/7 one by one without breaking your app. This approach was originally built in Microsoft Project Migrations tool, you can think of Upgrade Assistant in Visual Studio as a new improved and extended version of Microsoft Project Migrations. Upgrading from .NET Core or .NET 5 to .NET 6/7 is much easier than from .NET Framework, so for those cases In-place option is recommended.

In the table below you can find the status of all upgrade types by project type.

In-place Side-by-side Side-by-side incremental
ASP.NET from .NET Framework N/A N/A supported
ASP.NET from .NET Core, .NET5+ supported N/A N/A
WinForms from .NET Framework supported supported N/A
WinForms from .NET Core, .NET5+ supported N/A N/A
WPF from .NET Framework supported supported N/A
WPF from .NET Core, .NET5+ supported N/A N/A
Class Library from .NET Framework supported supported supported
Class Library from .NET Core, .NET5+ supported N/A N/A
Console from .NET Framework supported supported N/A
Console from .NET Core, .NET5+ supported N/A N/A
Xamarin to MAUI in development in development N/A
MAUI from older versions in development N/A N/A
UWP to WinUI in development in development N/A
WinUI from older versions in development N/A N/A
Azure Functions in development N/A N/A
WCF to WCF Core in development N/A N/A

Step by step upgrade

  1. Install Upgrade Assistant Visual Studio extension.
  2. In Visual Studio in Solution Explorer right-click on the project you want to upgrade, choose Upgrade. Upgrade Assistant in Solution Explorer
  3. You will see the main page with a few options for your upgrade.Upgrade Assistant welcome pageWhich option to choose is described in different upgrade types.
  4. For this example, I choose In-place. Side-by-side would be very similar with a few extra steps. Additional features of side-by-side incremental are described in our previous blog post.
  5. Then you need to choose the framework you want to upgrade to. The tool will suggest only options that make sense for your project type. In my example, it’s a .NET Framework class library so it also suggests .NET Standard..NET versions selection in the Upgrade AssistantAll upgrades are forward, meaning that if your project for example is already on .NET 6, only .NET 7 and later will be offered. If you do not have the chosen SDK installed on your computer, you’ll be prompted to install it on the next step. Simply follow the link and go back to your upgrade after the SDK is installed. .NET Standard is suggested only for Class Libraries that were targeting .NET Framework.
  6. Now is time to choose the components you’d like to upgrade. Eventually you will need to upgrade everything, but if you prefer doing it step-by-step, this is the screen to select what do you want to start with.Project components selection in the Upgrade Assistant
  7. After you click Upgrade selection you will see the progress of your upgrade and a report after it is completed.Upgrade Assistant progress page

Summary

You can now upgrade your .NET projects right from inside Visual Studio. Please tell us how this works for you and what else you’d need for your projects by filling out this brief survey.

You can also file issues or feature requests from Visual Studio by choosing Help | Send Feedback. Ensure to mention “Upgrade Assistant vsix” in the title.

Resources

Author

Olia Gavrysh
Senior Product Manager

Olia is working on .NET Core and WinForms. Before she was doing Machine Learning and AI at ML.NET team.

40 comments

Discussion is closed. Login to edit/delete existing comments.

  • Mitchell Lake

    This is great! I’m curious about how others are feature flagging their upgraded routes.

  • Vincent Yang

    I love this VS extension, however I couldn’t find a way to specify custom upgrade extension dlls which I use most of time from command line upgrade-assistant upgrade xxxx.csproj –extension “c:\temp\MyCustomUpdater”.

  • Roberto Mencia

    You could use it to upgrade Visual Studio to .net 7.
    That would be a proof that it’s bulletproof.

  • sateesh vankayala

    How does it will be use for upgrade a .Net Core 3.1 to 6 project ?

  • Andriy Savin

    Great tool, but please, make it available for ARM64 architecture.

  • A I

    There seems to be a problem with installing this tool. It keeps giving this error "extension is not installable on any currently installed products". Error in logs is also given below.
    Very disappointed, this error made me uninstall my other VS versions as well other than VS 2022 thinking this might solve the error. The tool's error handling and recovery is very unfriendly.

    <code>

    Read more
  • Javier De la GarzaMicrosoft employee

    This is awesome! Makes me crave an extension that can port CPS projects into NET SDK project styles. Always a hassle just trying to upgrade. Can this tool do that?

  • Eric Dillenseger

    I just tried it on a small project and it created a Program.cs with top-level statements enabled.
    Either give us a choice to disable top-level statements or don’t enable it by default, top-level statements maybe useful for prototyping a quick idea, but there’s no place for it when migrating an existing project, especially if there’s no obvious way to disable it without using things like Rider or Resharper.

  • Jonathan Jørgensen

    If you have some projects that are difficult to migrate, you may leave them in .NET framework and call them through gRPC/namedpipes by using https://github.com/jjoergensen/NetBridge

  • Steve Sheldon

    Tried this out on one of our dotnet 5 projects we need to update. I general it works.

    One class it refused to upgrade, and it's not clear why. Another big problem is with all of our unit test projects it just up and removed the testadapter nuget package. I added that back, same version and it works, so I'm not sure what's going on there.

    I would like to...

    Read more