Exam Area: Content Area 2 – Installation, Operation & Configuration (20%)
Reference: https://docs.developers.optimizely.com/content-management-system/docs/upgrade-to-cms-12
| CMS 11 | CMS 12 |
|---|---|
| ASP.NET MVC 5 (.NET Framework 4.x) | ASP.NET Core (.NET 6+) |
| Web.config | appsettings.json |
| Global.asax | Program.cs / Startup.cs |
| Unity IoC | Microsoft.Extensions.DependencyInjection |
| StructureMap | Microsoft.DI |
[InitializableModule] (old pattern) | IInitializableModule (current pattern) |
# Install the Upgrade Assistant
dotnet tool install -g upgrade-assistant
# Analyze the project
upgrade-assistant analyze ./MySite.csproj
# Run the upgrade
upgrade-assistant upgrade ./MySite.csproj
Web.config → appsettings.json// CMS 11
using EPiServer.ServiceLocation; // ServiceLocator
// CMS 12 - Still available but prefer DI
using EPiServer.ServiceLocation;
// CMS 11 (StructureMap/Unity)
[ServiceConfiguration(typeof(IMyService))]
public class MyService : IMyService { }
// CMS 12 (Microsoft DI)
// Register in Startup.cs
services.AddScoped<IMyService, MyService>();
// Or use IConfigurableModule
// CMS 11
[InitializableModule]
[ModuleDependency(typeof(EPiServer.Web.InitializationModule))]
public class MyInit : IInitializableModule
{
public void Initialize(InitializationEngine context)
{
context.Locate.Advanced.GetInstance<IContentEvents>()
.PublishedContent += OnPublishedContent;
}
public void Uninitialize(InitializationEngine context)
{
context.Locate.Advanced.GetInstance<IContentEvents>()
.PublishedContent -= OnPublishedContent;
}
}
// CMS 12 (similar, but use MS DI in constructor)
[InitializableModule]
[ModuleDependency(typeof(ServiceContainerInitialization))]
public class MyInit : IInitializableModule
{
private readonly IContentEvents _contentEvents;
public void Initialize(InitializationEngine context)
{
_contentEvents = context.Locate.Advanced.GetInstance<IContentEvents>();
_contentEvents.PublishedContent += OnPublishedContent;
}
public void Uninitialize(InitializationEngine context)
{
_contentEvents.PublishedContent -= OnPublishedContent;
}
private void OnPublishedContent(object sender, ContentEventArgs e) { }
}
net6.0appsettings.jsonProgram.cs# Check for outdated packages
dotnet list package --outdated
# Update packages
dotnet add package EPiServer.CMS --version 12.x.x
dotnet add package EPiServer.CMS.UI --version 12.x.x
# CMS runs schema updates automatically when AutoUpdateDatabaseSchema = true
# Production: Run manually
dotnet episerver database update
# Check add-on compatibility
# See: https://nuget.optimizely.com/
# Update add-ons to versions compatible with CMS 12
dotnet add package EPiServer.Forms --version 5.*
dotnet add package EPiServer.Find --version 14.*
Web.config from CMS 11 in CMS 12? (appsettings.json)Global.asax? (Program.cs / Startup.cs)dotnet tool install -g upgrade-assistant)