Breaking changes in CMS 11
Describes breaking changes for Optimizely Content Management System (CMS 11) in relation to previous version 10, and the steps needed to update affected code.
To view the complete list of changes, see the release notes feed.
Some changes are binary breaking but do not necessarily require code changes but rather just a recompilation of the project. Breaking changes are changes in method signatures or behavior of methods compared to the documented API in the previous version, which are described in this document.
New NuGet packages
In Optimizely Content Management System (CMS) version 11, some functionality, as for example TinyMCE, has been moved to separate NuGet packages. These packages have their own version number and may or may not be upgraded together with the core CMS packages.
XForms has also been moved to its own NuGet package. This means that the Forms viewer gadget, which was deprecated in CMS 10, is now also removed.
Most upgrades do not require changes to code but require a re-compilation. It is important to have the correct packages installed. A missing package causes compilation errors after upgrading a site. See New NuGet packages for which packages you need to manually add.
Separate NuGet packages for ASP.NET dependencies (CMS-8106)
- The integration with ASP.NET has moved to separate packages EPiServer.Framework.AspNet and EPiServer.Cms.AspNet.
EPiServer.MirroringService.MirroringMonitoring.MirroringMonitoringModule
has moved from EPiServer.Enterprise to EPiServer.Cms.AspNet. It must be manually changed in web.config for the mirroring module.- Usage of StructureMap as IOC container was moved to a separate package, EPiServer.ServiceLocation.StructureMap.
- .NET Framework 4.61 is required.
- MVC 5.2.3 is required.
CreatePropertyControl
has been removed fromPropertyData
. UseIPropertyControlFactory
instead to register and create controls forPropertyData
types.- Providers (for example
ContentProvider
,BlobProvider
) no longer inheritProviderBase
. If a provider that supports configuration through web.config has an initialization method with the signature voidInitialize(string name, NameValueCollection config
), it will be called during the initialization phase IServiceLocator
no longer supports named instances. The specific implementation inEPiServer.ServiceLocation.StructureMap
supports named instances.- Some methods in
IServiceLocator
have been removed from interface and are now extension methods inEPiServer.ServiceLocation
namespace. EPiServer.Search.SearchSettings.Config
has been replaced byEPiServer.Search.SearchSettings.Options
.- It is no longer supported to get an
ILogger
instance from IOC container. - Calls to logger that occur before
IConfigurableModules
are created, are not guaranteed to be persisted. - The setting for logger factories
episerver:LoggerFactoryType
must now always be quailfied with assembly name, even for built-in logger factories. - The method
IStringFragment.GetControl
has been removed. UseIStringFragmentControlResolver
instead to create controls for string fragments. - Configuration sectionsÂ
EPiServerFrameworkSection
,ÂStaticFileSection
,ÂEPiServerDataStoreSection
, andÂSearchSection
 have been moved to assembly EPiServer.Framework.AspNet. - Property
Database
onDataAccessBase
has been removed and is replaced by the property Executor. PageData.LinkUrl
no longer contains the query parameterepslanguage
.ContentProviders
can no longer useCacheSettings.Filenames
(previously obsoleted) to set up dependencies to files.EPiServer.Web.InitializationModule
has been moved to EPiServer.Cms.AspNet assembly and can be used as dependency module for other modules that want to run after Optimizely CMS is initialized when running as a ASP.NET application. There is a new moduleEPiServer.Initialization.CmsCoreInitialization
in assemblyEPiServer
. It can be used as dependency module for modules that want to run after CMS Runtime is initialized when running CMS outside ASP.NET context.- Previously obsoleted methods Rebase/MakeRelative on type EPiServer.Web.UrlBuilder in assembly
EPiServer
have been moved to extensions method defined in assembly EPiServer.Cms.AspNet. TypeUrlBuilder.RebaseKind
is also moved toEPiServer.Web.RebaseKind
in EPiServer.Cms.AspNet assembly. AccessControlList.Save
has been deprecated and is no longer supported. UseIContentSecurityRepository
instead.
Manually and automatically registered templates share the same behavior (CMS-4161)
- Templates registered manually using
ITemplateRepository.AddTemplates
are now associated with the model type for which they are added, rather than the model type indicated through anyIRenderTemplate
interface of the template. This may affect the template selection during runtime, as the model type association is used to decide which template to use when rendering a content item. This change does not affect automatically registered templates, as they are already registered using the type specified by theIRenderTemplate
interface. - The default implementation of
ITemplateRepository.AddTemplates
now checks if a template exists before adding it. If the template is already registered, it does not add another one. - The default implementation of
ITemplateRepository.AddTemplates
now makes sure that all template models are read-only before adding them to the repository.
PropertList (CMS-7212)
EPiServer.Core.Transfer.IRawContentRetriever
no longer populates the value of eachRawProperty
. Instead, this is done by calling theIPropertyExporter.ExportProperties
method.EPiServer.Core.Transfer.IPropertyImporter
has changed slightly to match the newIPropertyExporter
interface.PropertyData.ToRawString()
is no longer called when exporting data. If a CustomPropertyData
type had previously overridden theToRawValue
method, it must now move that functionality to a class that implementsIPropertyExportTransform
and register it with theContainer
.PropertyJson
-based properties, such asPropertyList<T>
, no longer rely onIObjectSerializer
and container-registeredJsonConverters
for their serialization. They now useNewtonsoft.Json.JsonConvert
directly. This means thatJsonConverters
must be defined as attributes on the classes and properties to which they apply.
Explicit IVersionable implementation on PageData is removed (CMS-7700)
PageData
no longer exposes a separate explicit implementation ofIVersionable.StartPublish
andIVersionable.StopPublish
.
Performance improved when loading large amounts of uncached content (CMS-7735)
CreateWritableClone
is used to create new instances of content instances when loading from database.
Target .NET Standard 2 in CMS.Core and Framework (CMS-8133)
ThumbnailManager
has been moved to EPiServer.Cms.AspNet.Castle.Core
dependency has been changed to [4.2.1, 5.0).Castle.Windsor
dependency has been changed from [4.1.0, 5.0).
Scheduled jobs have a shorter default content cache expiration (CMS-8653)
- Content loaded from a database and added to cache by scheduled jobs has a shorter cache expiration (default 1 minute).
Memory usage optimization: Data class PropertyData does not expose services (CMS-8659)
SettingsID
is obsoleted. Use extension methodGetSettingsID
or serviceIPropertyDataSettingsHelper
instead.SettingsContainer
is obsoleted. Use the extension methodGetSettingsContainer
or serviceIPropertyDataSettingsHelper
instead.TranslateDisplayName()/TranslateDescription()
was moved to extension method.
Other changes
CMS Core
- CMS-7749Â The Provider property is no longer supported, as it is not possible to expose a fully thread-safe IList implementation.Â
- CMS-7791Â Simple address is now the last registered router.
- CMS-6988Â
MoveContentEventArgs.ContentLink
is updated when content is moved between providers. - CMS-9129Â Unsupported HostType's Service, Installer, VisualStudio have been obsoleted.
CMS UI
- CMS-1130Â The
UIHint.BlockFolder
andUIHint.MediaFolder
have been obsoleted and are replaced byUIHint.AssetsFolder
. - CMS-1252Â Error message now displayed when updating partially rendered content.
- CMS-6217Â Content repository descriptor keys are now not case sensitive.
- CMS-6815Â
IContentChangeManager.Move(IContent source, IContent destination, bool createAsLocalAsset)
 now returns theContentReference
of the moved content instead of void. This adds support for the scenario where content is assigned a newContentLink
value when it is moved between different content providers. - CMS-8229Â
ApplicationUIUserManager<TUser>.ResetPassword(IUIUser user)
 now throws a not supported exception. This is due to the fact that ASP.NET Identity does not support generating new passwords for security reasons. Use the new methodResetPassword(IUIUser user, string newPassword)
 instead. - CMS-8802 The deprecated datetime.js methodsÂ
serialize()
anddeserialize()
have been removed. - CMS-8816Â The deprecated slash method has been removed from epi/string.
- CMS-8817Â epi-cms/widget/HierarchicalList has been replaced by epi-cms/asset/HierarchicalList.
- CMS-8830Â The deprecated property
SiteDefinitionResolver
onÂContentSearchProviderBase
has been removed. UseSiteResolver
instead. - CMS-8832Â The deprecated
EPiServer.Shell.Web.Mvc.Html.DojoExtensions
has been removed, use.ConfigureDojo
instead. DateTime
 properties on the visitor group criterion model are serialized to ISO 8601 when being sent to the client.- TheÂ
MissingConfigurationException
 now inherits directly fromÂException
. - TheÂ
UIHint.LongString
 has been obsoleted and should be replaced withÂUIHint.Textarea
. - Properties which use LegacyPropertyEditorDescriptor should be explicitly annotated withÂ
UIHint.Legacy
. - Obsoleted constructors are removed where there are public constructors available that can be used instead.
- Obsoleted properties have been removed fromÂ
PropertyUpdateResult
,ÂComponentContainer
,ÂContentSearchProviderBase
, andÂCmsModuleViewModel
. - Obsoleted classesÂ
ZipFileVirtualPathProvider
 andÂSecurityEntityUtility
 have been removed. - Obsoleted methods have been removed fromÂ
UIDescriptorRegistry
. _GrigWidgetBase
 now emitsÂselectionChanged
 when deselecting row. Previously, it was triggered only when a row was selected.- The obsoleted delegateÂ
DependencyGetter
 has been removed. - The obsoleted methodsÂ
watchModelChange
 andÂunwatchModelChange
 inÂepi/shell/_Command
 has been changed from public to internal. - The classÂ
ContentReferenceStore
 that was available by epi.cms.contentreferences key is now obsoleted.
Manual changes required to legacy feature Mirroring
An updated DLL is available in the EPiServer.CMS.Core NuGet package (packages/EPiServer.CMS.AspNet.11.1.0/tools/MirroringService/), which you must manually patch when upgrading.
Change
- EPiServer.MirroringService.MirroringTransferProtocol.WCF.MirroringTransferClient,EPiServer.Enterprise to
EPiServer.MirroringService.MirroringTransferProtocol.WCF.MirroringTransferClient,EPiServer.Cms.AspNet - EPiServer.Security.WindowsMembershipProvider,EPiServer toÂ
EPiServer.Security.WindowsMembershipProvider, EPiServer.Cms.AspNet in web.config.
Updated 7 months ago