{"id":45506,"date":"2023-05-02T10:00:00","date_gmt":"2023-05-02T17:00:00","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/dotnet\/?p=45506"},"modified":"2024-12-13T14:16:08","modified_gmt":"2024-12-13T22:16:08","slug":"upgrade-assistant-general-availability","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/upgrade-assistant-general-availability\/","title":{"rendered":"Announcing a new version of the .NET Upgrade Assistant with support for .NET MAUI and Azure Functions!"},"content":{"rendered":"<p>We are happy to announce that we have released a new version of <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-dotnettools.upgradeassistant\">.NET Upgrade Assistant<\/a> in Visual Studio that makes your upgrades to the latest .NET framework even easier!<\/p>\n<p>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 <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/upgrade-assistant-now-in-visual-studio\/\">released the Visual Studio extension for this tool in February<\/a> and now a new version is out with many improvements and new features.\nMake sure you have automatic updates turned on for this tool to get the best experience. In <strong>Visual Studio<\/strong> | <strong>Extensions<\/strong> | <strong>Manage Extensions<\/strong> find <strong>.NET Upgrade Assistant<\/strong> in <strong>Installed<\/strong> and ensure the <strong>Automatically update this extension<\/strong> is checked. Run Visual Studio as administrator to make this change if needed.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2023\/06\/automatic-updates.png\" alt=\"Manage Extensions\" \/><\/p>\n<h2>What&#8217;s new in this version<\/h2>\n<p>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:<\/p>\n<ul>\n<li>Support for .NET 8.<\/li>\n<li>Upgrades from Xamarin.Forms to .NET MAUI.<\/li>\n<li>Upgrades for Azure Functions.<\/li>\n<li>Upgrades from UWP to WinUI.<\/li>\n<li>Support for ARM64.<\/li>\n<\/ul>\n<h2>Updates and Enhancements<\/h2>\n<p>This version also includes several enhancements that developers have been asking for and improve the overall experience when using the .NET Upgrade Assistant:<\/p>\n<ul>\n<li>Improved the way Upgrade Assistant updates NuGet packages.<\/li>\n<li>Upgraded <strong>Incremental<\/strong> scenario to use YARP 2.0.<\/li>\n<li>Improved error handling, now all failures and warnings can be seen in the Progress View for each project component.<\/li>\n<li>Many infrastructural updates to the engine of the tool that improved performance and overall quality of upgrades.<\/li>\n<li>Support for SDK-style projects that are using <code>System.Web<\/code>. Before, web projects that were manually converted to SDK-style but still were using <code>System.Web<\/code> 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.<\/li>\n<li>WinForms \u2013 added handling for the cases when certain APIs from the old version are not supported in the new .NET version.<\/li>\n<li>ASP.NET &#8211; added improvements to how projects are getting upgraded behind the scenes.<\/li>\n<\/ul>\n<h2>More about updates to .NET 6, 7, 8<\/h2>\n<p>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.<\/p>\n<p>Here is how the package upgrades work:<\/p>\n<ul>\n<li>\n<p>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&#8217;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.<\/p>\n<\/li>\n<li>\n<p>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.<\/p>\n<\/li>\n<\/ul>\n<p>Another new feture is support for Preview upgrades: now you can upgrade from the older Preview version to the most recent one.<\/p>\n<h2>Upgrades from Xamarin.Forms to .NET MAUI<\/h2>\n<p>Now you can upgrade your existing Xamarin.Forms applications to Xamarin&#8217;s successor &#8211; .NET MAUI.<\/p>\n<p>In comparison to Xamarin.Forms, .NET MAUI has many benefits and improvements such as:<\/p>\n<ul>\n<li>\n<p><strong>single project<\/strong> to simplify asset management, NuGet management, and leverage multi-targeting.<\/p>\n<\/li>\n<li>\n<p><strong>multi-window support<\/strong> for desktop &amp; tablet scenarios<\/p>\n<\/li>\n<li>\n<p><strong>rebuilt layout<\/strong> to improve maintainability, performance, and correct many quirks present in Xamarin.Forms.<\/p>\n<\/li>\n<li>\n<p><strong>App Builder<\/strong> To standardize app bootstrapping with common .NET pattern<\/p>\n<\/li>\n<li>\n<p><strong>decoupled platform from cross-platform controls<\/strong><\/p>\n<\/li>\n<li>\n<p>Layered renderer pattern over new handlers<\/p>\n<\/li>\n<li>\n<p>Refactored Shell implementations<\/p>\n<\/li>\n<\/ul>\n<p>and many more. You can read the <a href=\"https:\/\/learn.microsoft.com\/dotnet\/maui\/what-is-maui\">.NET MAUI documentation<\/a> for more details.<\/p>\n<p>To upgrade your Xamarin.Forms app to .NET MAUI:<\/p>\n<ol>\n<li>\n<p>In Visual Studio, in <strong>Solution Explorer<\/strong> right-click on one of your projects and choose <strong>Upgrade<\/strong>. You need to have <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=WebToolsTeam.aspnetprojectmigrations\">Upgrade Assistant Visual Studio extension<\/a> installed to see the <strong>Upgrade<\/strong> 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.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2023\/06\/upgrade-in-solution-explorer.png\" alt=\"Upgrade Assistant in Solution Explorer\" \/><\/p>\n<\/li>\n<li>\n<p>You will see the main page with a few options for your upgrade.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2023\/06\/maui-welcome.png\" alt=\"Upgrade Assistant welcome page for MAUI\" \/><\/p>\n<p>Choose <strong>In place<\/strong> if you want your original project to be upgraded or <strong>Side-by-side<\/strong> if you want to create a new MAUI project next to your original one and leave the original one unchanged.<\/p>\n<\/li>\n<li>\n<p>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.<\/p>\n<\/li>\n<li>\n<p>Repeat it for every project of your solution.<\/p>\n<\/li>\n<li>\n<p>After the upgrades are complete you&#8217;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&#8217;ll need to fix them manually.\n<img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2023\/06\/xamarin-lib-changes.png\" alt=\"Changes made by Upgrade Assistant for Xamarin project\" \/><\/p>\n<\/li>\n<\/ol>\n<blockquote>\n<p>Note: for <code>.xaml<\/code> file transformations the Upgrade Assistant includes basic namespace replacements. More comprehensive .xaml file transformations require Visual Studio 17.6.<\/p>\n<\/blockquote>\n<h2>Upgrades for Azure Functions<\/h2>\n<p>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.<\/p>\n<ul>\n<li><strong>Version 1.x<\/strong> is the oldest version of Azure Functions. It is still supported for .NET Framework but should not be used for new development.<\/li>\n<li><strong>Version 2.x<\/strong> 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.<\/li>\n<li><strong>Version 3.x<\/strong> is a major upgrade from version 2.x and includes a few new features, such as improved integration with Azure Event Grid.<\/li>\n<li><strong>Version 4.x<\/strong> 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.<\/li>\n<\/ul>\n<p>Each version of Azure Functions supports specific versions of .NET. You can find more information in the <a href=\"https:\/\/learn.microsoft.com\/azure\/azure-functions\/migrate-version-1-version-4?tabs=v4%2Cazure-cli%2Cwindows&amp;pivots=programming-language-csharp\">documentation<\/a>.<\/p>\n<p>When you are upgrading your Azure Functions project to the latest .NET, the tool will automatically upgrade the version of Azure Functions to <strong>v4<\/strong> isolated since it is the best and recommended version.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2023\/06\/azf-change.png\" alt=\"Changes made by Upgrade Assistant for Azure Functions project\" \/><\/p>\n<p>You can upgrade your Azure Functions project the same way as any other project, by right-clicking on the project in the <strong>Solution Explorer<\/strong>, clicking on the <strong>Upgrade<\/strong> option and following along with the upgrade steps in the tool.<\/p>\n<p>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.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2023\/06\/azf-function-change.png\" alt=\"Changes made by Upgrade Assistant for Azure Functions Function.cs file\" \/><\/p>\n<p>You can read more about Azure Functions in the <a href=\"https:\/\/learn.microsoft.com\/azure\/azure-functions\/migrate-version-1-version-4?tabs=v4%2Cazure-cli%2Cwindows&amp;pivots=programming-language-csharp\">documentation<\/a>.<\/p>\n<h2>What\u2019s next<\/h2>\n<p>Next, we are going to focus on improving the quality of the upgrades, stabilizing the tool, addressing existing bugs and your feedback.<\/p>\n<p>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.<\/p>\n<h2>Learn how to upgrade<\/h2>\n<p>We have lots of materials to help you with your upgrade process:<\/p>\n<ul>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/upgrade-assistant-now-in-visual-studio\/\">Blog about Upgrade Assistant Visual Studio extension<\/a><\/li>\n<li><a href=\"https:\/\/youtu.be\/3mPb4KAbz4Y\">Video &#8211; how to use Visual Studio extension<\/a><\/li>\n<li><a href=\"https:\/\/dotnet.microsoft.com\/platform\/upgrade-assistant\/tutorial\/intro\">Tutorial for CLI tool<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/playlist?list=PLdo4fOcmZ0oWiK8r9OkJM3MUUL7_bOT9z\">Video series on Upgrade Assistant and ASP.NET<\/a><\/li>\n<li><a href=\"https:\/\/learn.microsoft.com\/azure\/azure-functions\/migrate-version-1-version-4?tabs=v4%2Cazure-cli%2Cwindows&amp;pivots=programming-language-csharp\">Upgrading Azure Functions<\/a><\/li>\n<\/ul>\n<h2>Give us feedback!<\/h2>\n<p>Please give us your feedback so we can build the right tools for you by filling out this <a href=\"https:\/\/www.surveymonkey.com\/r\/CX67DS8\">brief survey<\/a>.<\/p>\n<p>You can also <a href=\"https:\/\/learn.microsoft.com\/visualstudio\/ide\/suggest-a-feature\">file issues or feature requests from Visual Studio<\/a> by choosing <strong>Help<\/strong> | <strong>Send Feedback<\/strong>. Ensure to mention &#8220;Upgrade Assistant vsix&#8221; in the title.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The new version of .NET Upgrade Assistant is available in Visual Studio Marketplace with lots of updates and new features!<\/p>\n","protected":false},"author":365,"featured_media":46047,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[685,195,197,7509,7163,509],"tags":[3267,7672],"class_list":["post-45506","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-dotnet-framework","category-aspnet","category-aspnetcore","category-winforms","category-wpf","tag-migration","tag-upgrade-assistant"],"acf":[],"blog_post_summary":"<p>The new version of .NET Upgrade Assistant is available in Visual Studio Marketplace with lots of updates and new features!<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/45506","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/365"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=45506"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/45506\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/46047"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=45506"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=45506"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=45506"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}