<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Blog posts by Senura Dissanayake</title><link href="http://world.optimizely.com" /><updated>2024-01-22T13:55:18.0000000Z</updated><id>https://world.optimizely.com/blogs/senura-dissanayake/</id> <generator uri="http://world.optimizely.com" version="2.0">Optimizely World</generator> <entry><title>The challenges I faced during the migration from CMS version 11 to 12</title><link href="https://world.optimizely.com/blogs/senura-dissanayake/dates/2024/1/the-challenges-i-faced-during-the-migration-from-cms-version-11-to-12/" /><id>&lt;p&gt;&lt;span&gt;This blog post covers the major steps I had to face when migrating from CMS 11 to CMS 12. And this also contains the issues I had to experience related to .NET because of upgrading from .NET Framework to .NET 8.&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The intention of this blog post is to help you diagnose and fix similar issues to what I had faced when upgrading to Optimizely CMS 12. Below, you can find the major steps I have followed. Note that your solution will be different from mine; and ignore any of the steps below if they do not relate to your solution and views should be fixed separately, which is not covered in this blog post.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;&#128104;&amp;zwj;&#128640; Before getting started&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Would be better if the CMS is updated to the latest CMS 11 version. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Make sure the source code and the databases are backed up.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Identify which features can be kept, removed, or updated. This might help when upgrading to CMS 12 as developers do not want to focus on fixing unneeded code on upgrade. (&lt;/span&gt;&lt;span&gt;&lt;em&gt;Despite, there could be situations where the developers may get to know in the middle of the migration when a specific feature needs to be refactored as the previous implementation is no longer compatible with .NET 8.&lt;/em&gt;)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Remove the unnecessary projects in the solution. (&lt;/span&gt;&lt;span&gt;&lt;em&gt;In my case I had residue projects which had so many package references and no practical use to the main project etc.&lt;/em&gt;)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;&#128640; Migration steps&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Install &lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/core/porting/upgrade-assistant-install#install-the-net-global-tool&quot;&gt;.NET Upgrade Assistant&lt;/a&gt; CLI tool.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;span&gt;dotnet tool install -g upgrade-assistant&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Or if you already have the upgrade assistant installed, update it to the latest.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;span&gt;dotnet tool update -g upgrade-assistant&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Run upgrade assistant using the below command.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;span&gt;upgrade-assistant upgrade &quot;Path to solution file or project file&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Here, I have not used &lt;a href=&quot;https://github.com/episerver/upgrade-assistant-extensions/&quot;&gt;Optimizely Upgrade Assistant Extensions&lt;/a&gt; as the latest version of .NET Upgrade Assistant (&lt;a href=&quot;https://www.nuget.org/packages/upgrade-assistant/0.5.568&quot;&gt;v0.5.568&lt;/a&gt;) still does not support having extensions. But if you need, you can use .Net Upgrade assistant v0.4.x (&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/core/porting/upgrade-assistant-install-legacy&quot;&gt;Legacy version&lt;/a&gt;) to use the &lt;a href=&quot;https://github.com/episerver/upgrade-assistant-extensions/&quot;&gt;Optimizely Upgrade Assistant Extensions&lt;/a&gt; (However, it does not support upgrading to.NET 8 as of January 2024.).&amp;nbsp; &lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;After running the above command, It will ask which project to be upgraded if you have provided the path to the solution file in the above step and if you have many projects in the solution.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; And once you have selected which project to be upgraded, it asks how the project to be upgraded. I have chosen &amp;ldquo;&lt;/span&gt;&lt;em&gt;In-place project upgrade&lt;/em&gt;&lt;span&gt;&amp;rdquo; as I want to replace the existing files with the updated files.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; And then it asks to which .NET target framework version you would like to upgrade. I have chosen .NET 8.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;nbsp; After the .NET upgrade is successfully completed, verify the &lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;TargetFramework&lt;/span&gt; &lt;/span&gt;in the project file is set to the relevant .NET version.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Create &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Program.cs&lt;/span&gt; (and &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;&lt;a href=&quot;https://github.com/episerver/Foundation/blob/main/src/Foundation/Startup.cs&quot;&gt;Startup.cs&lt;/a&gt;&lt;/span&gt;&lt;span&gt; if you like to have separate startup file).&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;public class Program 
{ 
    public static void Main(string[] args) 
    { 
        var environment = Environment.GetEnvironmentVariable(&quot;ASPNETCORE_ENVIRONMENT&quot;); 
        var isDevelopment = environment == Environments.Development; 

        if (isDevelopment) 
        { 
           // Logger configuration etc. 
        } 

        CreateHostBuilder(args, isDevelopment).Build().Run(); 
    } 

    public static IHostBuilder CreateHostBuilder(string[] args, bool isDevelopment) 
    { 
        if (isDevelopment) 
        { 
            return Host.CreateDefaultBuilder(args) 
                .ConfigureCmsDefaults() 
                .UseSerilog() 
                .ConfigureWebHostDefaults(webBuilder =&amp;gt; 
                { 
                    webBuilder.UseStartup&amp;lt;Startup&amp;gt;(); 
                }); 
        } 
        else 
        { 
            return Host.CreateDefaultBuilder(args) 
                .ConfigureCmsDefaults() 
                .ConfigureWebHostDefaults(webBuilder =&amp;gt; 
                { 
                    webBuilder.UseStartup&amp;lt;Startup&amp;gt;(); 
                }); 
        } 
    } 
} &lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/h4&gt;
&lt;h4&gt;&lt;strong&gt;Removed the below packages as they do not support CMS 12/.NET 8. (For more information, please check the &lt;a href=&quot;https://docs.developers.optimizely.com/content-management-system/docs/breaking-changes-in-content-cloud-cms-12&quot;&gt;CMS 12 breaking changes&lt;/a&gt;)&amp;nbsp;&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;TedGustaf.Episerver.GoogleMapsEditor 1.x (Use new &lt;/span&gt;&lt;a href=&quot;https://nuget.optimizely.com/package/?id=GoogleMapsEditor&quot;&gt;&lt;span&gt;GoogleMapsEdit&lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;/a&gt;&lt;span&gt;. See &lt;/span&gt;&lt;a href=&quot;https://tedgustaf.com/blog/2022/google-maps-editor-for-optimizely-cms-12/&quot;&gt;&lt;span&gt;this guide&lt;/span&gt;&lt;/a&gt;&lt;span&gt; for more info.&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;EPiServer.ServiceLocation.StructureMap 2.x&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Semantix.AutoConnect related packages. (&lt;/span&gt;&lt;span&gt;Only supports .NET Framework at the time this article was written&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Swashbuckle (&lt;/span&gt;&lt;span&gt;Note: If you have time, you could also try to install &lt;/span&gt;&lt;a href=&quot;https://www.nuget.org/packages/Swashbuckle.AspNetCore&quot;&gt;&lt;span&gt;Swashbuckle.AspNetCore&lt;/span&gt;&lt;/a&gt;&lt;span&gt; and refactor the old code which was on Swashbuckle package which did not support .NET Core. But I did not do that as Swashbuckle is not needed for our MVP&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;BVN.404Handler (Use &lt;/span&gt;&lt;a href=&quot;https://github.com/Geta/geta-notfoundhandler&quot;&gt;&lt;span&gt;https://github.com/Geta/geta-notfoundhandler&lt;/span&gt;&lt;/a&gt;&lt;span&gt; instead)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Geta.SEO.Sitemaps (Use &lt;/span&gt;&lt;a href=&quot;https://github.com/Geta/geta-optimizely-sitemaps&quot;&gt;&lt;span&gt;https://github.com/Geta/geta-optimizely-sitemaps&lt;/span&gt;&lt;/a&gt;&lt;span&gt; instead)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nuget.optimizely.com/package/?id=EPiServer.ContentDeliveryApi&quot;&gt;&lt;span&gt;EPiServer.ContentDeliveryApi&lt;/span&gt;&lt;/a&gt;&lt;span&gt; (.NET Framework package)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;EPiCode.DynamicMultiSearch&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nuget.org/packages/ImageProcessor&quot;&gt;&lt;span&gt;ImageProcessor&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;S&lt;/span&gt;&lt;span&gt;tructuremap.web&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Owin&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Microsoft.AspNet.Identity.Core&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Microsoft.AspNet.Providers.Core&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/h4&gt;
&lt;h4&gt;&lt;strong&gt;Check Episerver package versions&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;If you check the Episerver package versions after the .NET Upgrade Assistant completed its tasks, you may see that the Episerver CMS packages might have been automatically upgraded to the latest major version. If yes, then you are lucky &#129312;&#127808; &lt;/span&gt;&lt;span&gt;. In my case, The Episerver CMS packages are not upgraded. Thus, I had to upgrade them manually.&lt;/span&gt;&lt;span&gt; Please refer to the below step.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;(&lt;em&gt;Note: Some of the Episerver packages like ContentDeliveryApi and Find are automatically upgraded to the latest in my solution. But not having the Episerver CMS 12 automatically upgraded means I must deal with NuGet package conflicts etc.&lt;/em&gt;)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Resolve package conflicts&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span&gt;(Ignore this step if you have the Optimizely 12 packages and no .NET Framework package warnings)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;span style=&quot;margin: 0px; padding: 0px; user-select: text; -webkit-user-drag: none; -webkit-tap-highlight-color: transparent; color: #000000; font-family: &#39;Segoe UI&#39;, &#39;Segoe UI Web&#39;, Arial, Verdana, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: pre-wrap; background-color: #ffffff; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline-block;&quot; class=&quot;SCXW25070625 BCX8&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; user-select: text; -webkit-user-drag: none; -webkit-tap-highlight-color: transparent; position: relative; cursor: move; left: 0px; top: 2px; display: inline-block; text-indent: 0px; width: 601px; height: 30px; transform: rotate(0deg);&quot; class=&quot;WACImageContainer NoPadding DragDrop BlobObject SCXW25070625 BCX8&quot;&gt;&lt;img src=&quot;/link/6b24ae6df7794fc0832fe1863054ab8a.aspx&quot; style=&quot;margin: 0px; padding: 0px; user-select: text; -webkit-user-drag: none; -webkit-tap-highlight-color: transparent; border: none; vertical-align: baseline; width: 741px; height: 37px;&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;As you can see above, I had issues with EPiServer.Cms.AspNet as it conflicted with&amp;nbsp;EPiServer.Cms.AspNetCore package, and this was resolved by addressing package conflicts.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&lt;em&gt;I would recommend reviewing the package warnings that appear during the project build as they will indicate the packages resolved in .NET Framework&lt;/em&gt;)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Try to upgrade the Episerver CMS package to v12. If it does not work, investigate the Package Manager logs, and fix them first.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In my solution, I had to remove the below packages (In order) to reinstall Episerver CMS 12. (&lt;em&gt;I had to reinstall all the below packages after the Episerver CMS 12 is installed&lt;/em&gt;)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.Labs.LanguageManager&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.Personalization.MaxMindGeolocation&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.AddOns.Helpers&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.Forms.Core&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.CMS.UI.Core&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.CMS.UI&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.CMS.TinyMce&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.Forms.UI&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.Forms&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;DbLocalizationProvider.AdminUI.EPiServer&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;DbLocalizationProvider.EPiServer&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Microsoft.Azure.Amqp&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.ContentDeliveryApi.Core&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.ContentDeliveryApi.Search&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.ContentDeliveryApi.Cms&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.ContentDeliveryApi.Forms&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.Find.Cms&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.Marketing.Testing&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.Find.Framework&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.Marketing.KPI&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;DbLocalizationProvider.AdminUI&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;EPiServer.Azure&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Microsoft.Identity.Client&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Microsoft.IdentityModel.Protocols&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Microsoft.IdentityModel.Protocols.OpenIdConnect&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Other changes&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;If you have &lt;/span&gt;&lt;a href=&quot;/csclasslibraries/cms/EPiServer.PlugIn.GuiPlugInAttribute?version=11&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;GuiPlugins&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, refactor them with &lt;/span&gt;&lt;a href=&quot;https://docs.developers.optimizely.com/content-management-system/docs/using-menu-providers&quot;&gt;&lt;span&gt;Menu Provider&lt;/span&gt;&lt;/a&gt;&lt;span&gt;. See &lt;/span&gt;&lt;a href=&quot;/link/aa901c2390b44fce99cfd6b8838262d5.aspx&quot;&gt;&lt;span&gt;this blog post&lt;/span&gt;&lt;/a&gt;&lt;span&gt; for more information.&lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;Remove the irrelevant &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;&amp;lt;Content Include=&quot;...&quot; /&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;elements from the &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;ItemGroup &lt;/span&gt;in the&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;.csproj&lt;/span&gt;&lt;span&gt; file.&lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Some classes&amp;nbsp;&lt;/span&gt;&lt;span&gt;(&lt;em&gt;Such as the classes which are inherited from &lt;/em&gt;&lt;/span&gt;&lt;span&gt;&lt;em&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;EnterprisePageSearchProvider&lt;/span&gt;, &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;EnterpriseMediaSearchProvider&lt;/span&gt;, &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;EnterpriseBlockSearchProvider&lt;/span&gt; etc.&lt;/em&gt;) &lt;/span&gt;had issues with constructor injection due to the parameter updates in the base class injection. Fixed these by passing the relevant arguments.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;If the solution has &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;InternalServerError(object)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in the controllers; replace them with&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;StatusCode((int&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;)HttpStatusCode.InternalServerError, object);&lt;/span&gt;.&amp;nbsp;&lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;And I had to use&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Microsoft.AspNetCore.Mvc.IActionResult&lt;/span&gt; &lt;/span&gt;&lt;span&gt;instead of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;System.Web.Http.&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;IHttpActionResult&lt;/span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;IHttpActionResult&lt;/span&gt; &lt;/span&gt;&lt;span&gt;is not supported in .NET Core.&amp;nbsp;&lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;If your solution used &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;HttpContext.Context&lt;/span&gt;&lt;span&gt; previously, use &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;IHttpContextAccessor &lt;/span&gt;&lt;span&gt;through DE instead&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;This way, you can get the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;HttpContext &lt;/span&gt;&lt;span&gt;through&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;_httpContextAccessor.HttpContext&lt;/span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;The upgrade assistant has already replaced &lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;System.Web.Http.ApiController&lt;/span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Microsoft.AspNetCore.Mvc.ControllerBase&lt;/span&gt;. &lt;/span&gt;&lt;span&gt;However, I had to replace the &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Json &lt;/span&gt;method calls with&lt;/span&gt;&lt;span&gt; &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Microsoft.AspNetCore.Mvc.ContentResult&lt;/span&gt; &lt;/span&gt;&lt;span&gt;with the&lt;/span&gt;&lt;span&gt; &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;ContentResult.Content&lt;/span&gt; &lt;/span&gt;&lt;span&gt;set with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;System.Text.Json.JsonSerializer.Serialize(..)&lt;/span&gt; &lt;/span&gt;&lt;span&gt;as below&lt;/span&gt;&lt;span&gt;.&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;return new ContentResult() 
{ 
    Content = System.Text.Json.JsonSerializer.Serialize(value), 
    ContentType = &quot;application/json&quot;, 
}; &lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Microsoft.AspNetCore.Mvc.Filters&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;.ActionFilterAttribute&lt;/span&gt; &lt;/span&gt;&lt;span&gt;now has no&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;OnActionExecuting&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;overridable method which only accepts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;HttpActionContext&lt;/span&gt;. &lt;/span&gt;&lt;span&gt;Used&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.filters.actionexecutingcontext?view=aspnetcore-8.0&quot;&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;ActionExecutingContext&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;&lt;span&gt;type instead&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;IPropertyModelConverter&lt;/span&gt; &lt;/span&gt;&lt;span&gt;is missing in the new version of&lt;/span&gt;&lt;span&gt; &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;EPiServer.ContentDeliveryApi.Core&lt;/span&gt; &lt;/span&gt;&lt;span&gt;package. Thus, created below interface in the solution to keep the Model Converters which has implemented the&lt;/span&gt;&lt;span&gt; &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;IPropertyModelConverter&lt;/span&gt;.&lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;public interface IPropertyModelConverter 
{ 
    int SortOrder { get; } 
    IEnumerable&amp;lt;TypeModel&amp;gt; ModelTypes { get; } 
    bool HasPropertyModelAssociatedWith(PropertyData propertyData); 
    IPropertyModel ConvertToPropertyModel(PropertyData propertyData, CultureInfo language, bool excludePersonalizedContent, bool expand); 
} &lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;ContentFilter&lt;/span&gt;, &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;StandardSitemapXmlGenerator&lt;/span&gt;, &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;MobileSitemapXmlGenerator &lt;/span&gt;&lt;/span&gt;&lt;span&gt;and their interfaces which were belonged to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Geta.SEO.Sitemaps.Utils&lt;/span&gt; &lt;/span&gt;&lt;span&gt;are no longer available. Thus, used&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Geta.Optimizely.Sitemaps&lt;/span&gt; &lt;/span&gt;&lt;span&gt;package. And added base constructor injections in the classes which have inherited from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;ContentFilter &lt;/span&gt;&lt;span&gt;due to the changes in parameters in the new version.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;For the classes which are being inherited by&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;ActionFilterAttribute&lt;/span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;use&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Microsoft.AspNetCore.Mvc.Filters.&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;ActionExecutedContext&lt;/span&gt; &lt;/span&gt;&lt;span&gt;Instead of &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;System.Web.Http.Filters.&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;HttpActionExecutedContext&lt;/span&gt; &lt;/span&gt;&lt;span&gt;in the overridden&lt;/span&gt;&lt;span&gt; &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;OnActionExecuted &lt;/span&gt;&lt;/span&gt;&lt;span&gt;method. And use the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Request &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Response &lt;/span&gt;&lt;span&gt;through&lt;/span&gt;&lt;span&gt; &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;ActionExecutedContext.HttpContext&lt;/span&gt; &lt;/span&gt;&lt;span&gt;if needed.&lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;The places where we used &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;DataFactory&lt;/span&gt;, I used &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;IContentLoader &lt;/span&gt;&lt;span&gt;to get the contents with only read-only access.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;If you need to have the whole CRUD access, use&lt;/span&gt;&lt;span&gt; &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;IContentRepository &lt;/span&gt;&lt;/span&gt;&lt;span&gt;instead.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - &lt;span style=&quot;font-size: 10pt;&quot;&gt;Alternative approach: You could use &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;a href=&quot;https://nuget.optimizely.com/package/?id=EPiServer.CMS.AspNetCore.Migration&quot;&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;EPiServer.CMS.AspNetCore.Migration&lt;/span&gt;&lt;/a&gt; package which contains some old APIs. With that, you could choose to keep the &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;DataFactory &lt;/span&gt;implementations as they are without refactoring.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Passed the&lt;/span&gt;&lt;span&gt; &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;IMemoryCache &lt;/span&gt;&lt;/span&gt;&lt;span&gt;for the&lt;/span&gt;&lt;span&gt; &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;EPiServer.Find.Connection.RuntimeCacheAdapter&lt;/span&gt; &lt;/span&gt;&lt;span&gt;constructor as it no longer has a default constructor.&lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Try to build the solution to see the errors. &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Try to fix each error. (&lt;/span&gt;&lt;em&gt;Could not describe each error as most of them were to find the correct namespace or the package to be referred. And there were situations where we must find the .NET Core/Optimizely 12 implementation; if not, remove the implementation as it could not be kept in .NET 8&lt;/em&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;I have got the below build error at last. &#128530;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;CA0055 : Could not identify platform for &amp;ldquo;&amp;hellip;\project.dll&amp;rdquo;.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;CA0052 : No targets were selected.&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Once I have set the &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;RunCodeAnalysis&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;span&gt;to false in the &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;.csproj&lt;/span&gt; file, this error is no longer shown. &lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Create &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;&lt;em&gt;appSettings.json&lt;/em&gt;&lt;/span&gt;&lt;span&gt; with EPiServer CMS MappedRoles, EpiserverDB and Find Index connection information.  &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Remove &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Web.config&lt;/span&gt;&lt;span&gt; files.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Delete the packages folder in the solution folder to clear the package cache.&lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Build again and try to fix all the build issues and repeat; if no build issues, try to run the project.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Got &lt;/span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Geta.Optimizely.Sitemaps&lt;/span&gt;&lt;span&gt; module not found error on runtime when accessing the &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;episerver/cms&lt;/span&gt; after logged in. It is fixed by adding &quot;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;services.AddSitemaps();&lt;/span&gt;&quot;&lt;/span&gt;&lt;span&gt; in the &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Startup.cs&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;SCXW205056740 BCX8&quot;&gt;&lt;span class=&quot;WACImageContainer NoPadding DragDrop BlobObject SCXW205056740 BCX8&quot;&gt;&lt;img src=&quot;/link/d6828a0b89c443a8abc858f1249c0c32.aspx&quot; width=&quot;609&quot; alt=&quot;A screenshot of a computer program

Description automatically generated&quot; height=&quot;217&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Got the &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;DbLocalizationProvider.AdminUI.EPiServer&lt;/span&gt; module not found issue and other issues when accessing the &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;episerver/cms&lt;/span&gt; after logged in. Resolved by adding the below to &lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;Startup.cs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-family: terminal, monaco, monospace;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; user-select: text; -webkit-user-drag: none; -webkit-tap-highlight-color: transparent; color: #000000; font-family: &#39;Segoe UI&#39;, &#39;Segoe UI Web&#39;, Arial, Verdana, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 24px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: pre-wrap; background-color: #ffffff; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline-block;&quot; class=&quot;SCXW36255898 BCX8&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; user-select: text; -webkit-user-drag: none; -webkit-tap-highlight-color: transparent; position: relative; cursor: move; left: 0px; top: 2px; display: inline-block; text-indent: 0px; width: 601px; height: 180px; transform: rotate(0deg);&quot; class=&quot;WACImageContainer NoPadding DragDrop BlobObject SCXW36255898 BCX8&quot;&gt;&lt;img src=&quot;/link/c81cc7cbce7041b4bb9c97eacba6ec09.aspx&quot; alt=&quot;A screenshot of a computer program

Description automatically generated&quot; style=&quot;margin: 0px; padding: 0px; user-select: text; -webkit-user-drag: none; -webkit-tap-highlight-color: transparent; border: none; white-space: pre !important; vertical-align: baseline; width: 601px; height: 180px;&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;SCXW243036850 BCX8&quot;&gt;&lt;span class=&quot;WACImageContainer NoPadding DragDrop BlobObject SCXW243036850 BCX8&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;img src=&quot;/link/432028a7e6a74b85b62be34fe1710eb2.aspx&quot; width=&quot;644&quot; alt=&quot;A screenshot of a computer error

Description automatically generated&quot; height=&quot;233&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;app.UseDbLocalizationProvider(); &lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;services 
    .AddDbLocalizationProvider(ctx =&amp;gt; 
    { 
        ctx.EnableLocalization(); 
        ctx.UseSqlServer(Configuration.GetConnectionString(&quot;EPiServerDB&quot;)); 
    }) 
    .AddOptimizely();&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;services
.AddDbLocalizationProviderAdminUI()
.AddOptimizelyAdminUI();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;All done for MVP. Now, you should be able to log in with user credentials and access the CMS edit mode. And ContentDeliveryAPI should also work if you have enabled it. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Happy migrating!! &#127881;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</id><updated>2024-01-22T13:55:18.0000000Z</updated><summary type="html">Blog post</summary></entry></feed>