Announcing a new version of the .NET Upgrade Assistant with support for .NET MAUI and Azure Functions!

Olia Gavrysh

We are happy to announce that we have released a new version of .NET Upgrade Assistant in Visual Studio that makes your upgrades to the latest .NET framework even easier!

The .NET Upgrade Assistant is a tool that helps you upgrade your application to the latest .NET and migrate from the older platforms such as Xamarin Forms and UWP to newer offerings. We released the Visual Studio extension for this tool in February and now a new version is out with many improvements and new features. Make sure you have automatic updates turned on for this tool to get the best experience. In Visual Studio | Extensions | Manage Extensions find .NET Upgrade Assistant in Installed and ensure the Automatically update this extension is checked. Run Visual Studio as administrator to make this change if needed.

Manage Extensions

What’s new in this version

We are excited that this new release adds support for new scenarios for different platforms, frameworks, and more! Here are some of the new enhancements:

  • Support for .NET 8.
  • Upgrades from Xamarin.Forms to .NET MAUI.
  • Upgrades for Azure Functions.
  • Upgrades from UWP to WinUI.
  • Support for ARM64.

Updates and Enhancements

This version also includes several enhancements that developers have been asking for and improve the overall experience when using the .NET Upgrade Assistant:

  • Improved the way Upgrade Assistant updates NuGet packages.
  • Upgraded Incremental scenario to use YARP 2.0.
  • Improved error handling, now all failures and warnings can be seen in the Progress View for each project component.
  • Many infrastructural updates to the engine of the tool that improved performance and overall quality of upgrades.
  • Support for SDK-style projects that are using System.Web. Before, web projects that were manually converted to SDK-style but still were using System.Web could not be upgraded incrementally and were treated like Core-family projects. Now Upgrade Assistant treats them as .NET Framework projects and allows to upgrade them incrementally, which is the best way to upgrade web applications from .NET Framework to the latest .NET.
  • WinForms – added handling for the cases when certain APIs from the old version are not supported in the new .NET version.
  • ASP.NET – added improvements to how projects are getting upgraded behind the scenes.

More about updates to .NET 6, 7, 8

In the previous version of Upgrade Assistant, when you chose to upgrade from .NET Core or later to .NET 6, 7 or 8, Upgrade Assistant was just upgrading the target framework. Now it also upgrades all packages your application is referencing to a cohesive set of packages corresponding to the target .NET.

Here is how the package upgrades work:

  • For standard .NET runtime or ASP.NET Core packages the version will be set to the latest matching target framework 6, 7, or 8. For example, if you are upgrading your app to .NET 6, you’ll get the corresponding .NET 6 release package version, and if you are upgrading to .NET 8, your packages will be updated to the latest pre-release versions.

  • For all other packages the tool checks if this package already supports target framework, in that case the package remains unchaged. If not, the tool will check if the latest version of the package support the target framework to wich the app is upgraded. In case even the latest package version does not support the target framework, this package will be removed.

Another new feture is support for Preview upgrades: now you can upgrade from the older Preview version to the most recent one.

Upgrades from Xamarin.Forms to .NET MAUI

Now you can upgrade your existing Xamarin.Forms applications to Xamarin’s successor – .NET MAUI.

In comparison to Xamarin.Forms, .NET MAUI has many benefits and improvements such as:

  • single project to simplify asset management, NuGet management, and leverage multi-targeting.

  • multi-window support for desktop & tablet scenarios

  • rebuilt layout to improve maintainability, performance, and correct many quirks present in Xamarin.Forms.

  • App Builder To standardize app bootstrapping with common .NET pattern

  • decoupled platform from cross-platform controls

  • Layered renderer pattern over new handlers

  • Refactored Shell implementations

and many more. You can read the .NET MAUI documentation for more details.

To upgrade your Xamarin.Forms app to .NET MAUI:

  1. In Visual Studio, in Solution Explorer right-click on one of your projects and choose Upgrade. You need to have Upgrade Assistant Visual Studio extension installed to see the Upgrade option. You can start with any of the projects in your solution; you will need to upgrade all of them to make your app build.

    Upgrade Assistant in Solution Explorer

  2. You will see the main page with a few options for your upgrade.

    Upgrade Assistant welcome page for MAUI

    Choose In place if you want your original project to be upgraded or Side-by-side if you want to create a new MAUI project next to your original one and leave the original one unchanged.

  3. Follow along with the upgrade steps. Unless you have reasons to upgrade some parts of your project gradually, leave everything checked that the tool suggests and upgrade.

  4. Repeat it for every project of your solution.

  5. After the upgrades are complete you’ll see that the tool modified your project files, updated the references and made other required changes. Build and run your applications. If there are any other errors, you’ll need to fix them manually. Changes made by Upgrade Assistant for Xamarin project

Note: for .xaml file transformations the Upgrade Assistant includes basic namespace replacements. More comprehensive .xaml file transformations require Visual Studio 17.6.

Upgrades for Azure Functions

Azure Functions is a serverless compute platform that enables you to run code without provisioning or managing infrastructure. There are four major versions of Azure Functions: 1.x, 2.x, 3.x, and 4.x. Each version has its own set of features and capabilities.

  • Version 1.x is the oldest version of Azure Functions. It is still supported for .NET Framework but should not be used for new development.
  • Version 2.x is a major upgrade from version 1.x and includes a number of new features, such as support for multiple languages, improved performance, and a more flexible deployment model.
  • Version 3.x is a major upgrade from version 2.x and includes a few new features, such as improved integration with Azure Event Grid.
  • Version 4.x is a major upgrade from version 3.x and includes a number of new features, such as support for .NET 6, improved performance, and a more secure architecture.

Each version of Azure Functions supports specific versions of .NET. You can find more information in the documentation.

When you are upgrading your Azure Functions project to the latest .NET, the tool will automatically upgrade the version of Azure Functions to v4 isolated since it is the best and recommended version.

Changes made by Upgrade Assistant for Azure Functions project

You can upgrade your Azure Functions project the same way as any other project, by right-clicking on the project in the Solution Explorer, clicking on the Upgrade option and following along with the upgrade steps in the tool.

Besides updating project file to tharget the latest .NET version and Azure Functions version, the body of the functions is also getting updated to use the new APIs.

Changes made by Upgrade Assistant for Azure Functions Function.cs file

You can read more about Azure Functions in the documentation.

What’s next

Next, we are going to focus on improving the quality of the upgrades, stabilizing the tool, addressing existing bugs and your feedback.

We will also work on updating the existing CLI tool to talk to the same engine as Visual Studio extension. This way CLI tool will have all the new features that VSIX has, so you can choose between Visual Studio and CLI experience.

Learn how to upgrade

We have lots of materials to help you with your upgrade process:

Give us feedback!

Please give us your feedback so we can build the right tools for you 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.

22 comments

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

  • John Louros 4

    Thanks for you continuous support on this tooling. This is massive important for developers, like me, that are trying to upgrade to .Net Core

    • Olia GavryshMicrosoft employee 2

      Thank you for your kind words! Do reach out if you have any questions! or if something is blocking you!
      Also just to clarify, I recommend upgrading to .NET 6+, not to .NET Core, but I’m sure you meant .NET Core-family in your comment.

  • Mystery Man 1

    That’s great! Now I can migrate the apps I wrote for .NET Framework 2.0 (which is still bundled with Windows and supported) to .NET 8.0 (which is not included with Windows and goes out of support faster than .NET Framework 2.0). And instead of 1 MB, my simple apps will take up hundreds of megabytes. Yay!

    • Olia GavryshMicrosoft employee 2

      Long Term Support (LTS) versions of .NET (.NET 6, .NET 8, …) are supported for 3 years and upgrades to the next LTS (once you are already on .NET 6+) are very easy and in most cases will take minutes.

      As for the size of your app, you can still publish framework-dependent, in that case your application will still be very small in size. You are getting “hundreds of megabytes” only when you are publishing self-contained where you are packaging .NET libs together with your app.

      In return, when you upgrade from .NET Framework 2.x to .NET 6+ you’ll get significant performance improvements, the latest C# features, new .NET APIs, improved accessibility, many bug fixes and improvements. That all being said, if you are happy with your application targeting .NET Framework, you can totally stay there! As you mentioned, it is bundled with Windows and will be supported for as long as the Windows version is.

      • Mystery Man 1

        Don’t count too much on .NET’s performance. Third-party frameworks already offer machine-native performance and smaller disk footprints. .NET has always had the advantage of availability because it has always come with Windows. Is .NET losing that advantage?

        • Jorge Morales Vidal 3

          .NET now is open source, cross platform and well performant, those are the new advantages, which web devs and back-end devs welcome very much. Your feedback repeats what other haters have been repeating since .NET Core 1.0, specifically desktop devs who still don’t understand the benefits of recent C# and .NET versions.

          Please stay in .NET Framework 2.0 and Windows 7, if that makes you feel happy and productive, it’s a free world.

      • Jason Baginski 1

        “Very small in size” is not something I’ve ever been able to achieve with non “framework” .NET. A WinForm app .exe I converted went from 203K exe and a single external 64K dll to a 14.9Mb exe with the publish settings of “Release | x64” “net7.0-windows” “Framework-dependent” “win-x64” “Produce single file”. When turning off “Produce single file” I get an exe of 323K and 15Mb worth in 60 .dlls in 13 directories.

        So, at least with the codebases I work with, they aren’t even remotely wrong about the insane size difference between .NET framework and the latest .NET. When you have auto software updating, it’s an impact to customers having to download 15Mb(in either one file or 61) compared to 270Kb for two files.

      • Jan SeriÅ¡ 1

        >in most cases will take minutes.

        Except if you’re using System.Drawing.Common or BinaryFormatter

    • John Tur 0

      .NET Framework 2.0 is not supported. The official support page says that support for .NET Framework 2.0 ended on July 12, 2011.

    • Tyler 0

      Neat. Whenever I encounter software that requires me to enable .NET Framework 2.0/3.5 in Windows I move on and don’t give it another look.

  • Michael Taylor 1

    Unfortunately this new version doesn’t play correctly with the VS project system resulting in a set of cascading failures trying to upgrade a single .NET Framework 4.7.2 class library to .NET 6.0. This wasn’t an issue with the previous version. I’ve reported the issue here.

    At this point the extension is no longer working for me.

    • Olia GavryshMicrosoft employee 1

      Thank you for reporting the issue! Our engineers are looking into it and need a bit more details, could you please respond to the comment in the issue

  • Glaser, Thomas 0

    Does this support Xamarin.Forms projects targeting UWP yet? I tried the upgrade and it failed on the “csproj” file.

    • Olia GavryshMicrosoft employee 1

      If I understand you correct, yes, it is supported. Could you please file a bug in Visual Studio (top right corner) so our engineers can understand your setup and try to reproduce it.

  • Krishna Prasad 0

    Is there an upgrade path/option from UWP to MAUI?
    Win UI is still w-i-p and not full featured!?
    Currently it is only UWP ->WIN UI ->Then Uno platform to other platforms

    • Olia GavryshMicrosoft employee 1

      No, Upgrade Assistant cannot upgrade UWP to MAUI because while WinUI was built based on UWP as a continuation of that technology, .NET MAUI is a different platform and would require lots of changes. That being said, we appreciate your feedback and will keep listening to developers, if there will be a big demand for this scenario, we wight look into implementing it.

  • Joseph Finney 0

    Heads up, looks like there are no upgrades for UWP projects using the InkCanvas control.

    • Olia GavryshMicrosoft employee 1

      Could you please create a feature request in Visual Studio (top right corner) so we can track it and see how many other developers are blocked by that.

  • Jan SeriÅ¡ 0

    In comparison to Xamarin.Forms, .NET MAUI has many benefits and improvements such as:

    What about downsides and new known issues and unsupported features in MAUI vs in Xamarin.Forms? Where can we read that?

    • David OrtinauMicrosoft employee 1

      Hi Jan, you can review the open issues here to determine the impact on your app needs. https://github.com/dotnet/maui/issues

      As for feature comparison with Xamarin.Forms, the expectation is that everything should be there with only a few exceptions. For example, WinUI doesn’t offer a native map control whereas UWP does.

  • James 0

    Yay!

    Two things:

    a new version

    Which version would that be? I’m running “Microsoft Visual Studio Enterprise 2022 (64-bit) – Current Version 17.5.5” does this include the “new version”? 🙂

    I just tried upgrading an Azure Functions V1 project using the “Upgrade” project context menu action. It removed the Microsoft.NET.Sdk.Functions 1.0.38 package reference and some others with “Error. No messages.”. There were no code changes to upgrade the Functions themselves.

    Version 1.x is the oldest version of Azure Functions. It is no longer supported

    This keeps getting implied by various Microsoft people (esp on GitHub), but this is the first time I’ve seen it actually written out. The docs still say Azure Functions V1 is supported! Microsoft Support also claim that V1 is still supported (while simultaneously refusing to actually support by fixing bugs).

    I would super super appreciate it if that team could make a proper deprecation announcement, with dates, hopefully not backdated! It’s only been a few months since .NET Framework has been supported with Functions V4, and given there are still major 1st party dependencies (eg. Dynamics!) without .NET Core support it’s really not reasonable to expect everyone to migrate immediately.

    Thanks and really looking forward to this tool saving me a lot of time in the future!

  • Mohanaselvam J 0

    According to this documentation, Azure Functions 2.x and 3.x have reached their End of Life (EOL). However, I came across a blog that claims they are still supported. Can you please provide clarification on this?

Feedback usabilla icon