Выпуск Optimizely CMS 13 знаменует собой значительный шаг вперед, охватывающий более компонуемую и безголовую архитектуру. Это открывает новые мощные возможности, но также вносит важные изменения в базовую структуру.
В этом руководстве представлено практическое руководство по обновлению стандартного начального сайта CMS 12 Alloy до предварительной версии CMS 13. Мы рассмотрим обновления зависимостей, миграцию кода для устаревших API и новую модель конфигурации приложений.
Шаг 1. Создайте базовый сайт CMS 12
Во-первых, давайте определим отправную точку. Создайте новый сайт CMS 12 Alloy, используя шаблоны Optimizely. Это гарантирует, что перед началом обновления у нас будет чистая и работающая установка.
# Create a new Alloy project
dotnet new epi-alloy-mvc -n alloy13preview
# Build and run the site
dotnet build
dotnet run
После запуска сайта зарегистрируйте новую учетную запись пользователя, чтобы вы могли войти в систему. Убедитесь, что сайт полностью работоспособен. Когда вы будете готовы, закройте приложение.
Шаг 2. Обновление зависимостей проекта
После установления базовых показателей следующим шагом будет обновление файла проекта и пакетов NuGet.
-
Обновите целевую платформу: откройте файл .csproj и измените целевую платформу на
-
Обновление пакетов NuGet: обновить все версии пакета EpiServer.* до 13.0.0-preview2.
-
Добавить Аспнетидентити: CMS 13 отделяет управление идентификацией пользовательского интерфейса. Добавьте новую ссылку на пакет для EPiServer.CMS.UI.AspNetIdentity.
Шаг 3. Миграция кода и устранение устаревших API
CMS 13 проводит рефакторинг нескольких основных API. Компилятор теперь сообщит о серии предупреждений и ошибок, связанных с устаревшими членами. Давайте проработаем их.
Дружественный совет: Начиная миграцию, возьмите за привычку проверять предупреждения компилятора в вашей IDE или создавать выходные данные. Эти предупреждения — ваш путь к обнаружению каждого экземпляра устаревшего или устаревшего API в вашем конкретном проекте. Хотя в этом руководстве описаны общие изменения шаблона Alloy, в вашей кодовой базе могут быть и другие области, требующие внимания.
Используйте ContentReference и ContentLink.
Типы PageReference и PageData.PageLink устарели. Это изменение отражает более широкий сдвиг в сторону более общего подхода ко всему контенту. Исправление представляет собой простую замену вашего решения:
Замените SiteDefinition новой моделью приложения.
Концепция SiteDefinition заменена более гибкой. Модель приложения. Приложение связывает отправную точку в дереве контента с определенным режимом рендеринга (например, «В процессе» или «Безголовый») и именами хостов.
Чтобы решить эту проблему, вам необходимо внедрить IApplicationResolver в ваши контроллеры и службы, чтобы получить контекст текущего приложения (IApplication).
Вот пример рефакторинга StartPageController:
using alloy13preview.Models.Pages;
using alloy13preview.Models.ViewModels;
using EPiServer.Web;
using EPiServer.Web.Mvc;
using Microsoft.AspNetCore.Mvc;
using EPiServer.Applications;
using EPiServer.Shell.Security;
using EPiServer.Web.Routing;
namespace alloy13preview.Controllers;
public class StartPageController : PageControllerBase
{
private readonly IApplicationResolver _applicationResolver;
public StartPageController(IApplicationResolver applicationResolver)
{
_applicationResolver = applicationResolver;
}
public async Task Index(StartPage currentPage, CancellationToken cancellationToken)
{
var model = PageViewModel.Create(currentPage);
var application = await _applicationResolver.GetByContextAsync(cancellationToken);
var website = application as Website;
if (website is not null && website.RoutingEntryPoint.CompareToIgnoreWorkID(currentPage.ContentLink))
{
// Connect the view models logotype property to the start page's to make it editable
var editHints = ViewData.GetEditHints, StartPage>();
editHints.AddConnection(m => m.Layout.Logotype, p => p.SiteLogotype);
editHints.AddConnection(m => m.Layout.ProductPages, p => p.ProductPageLinks);
editHints.AddConnection(m => m.Layout.CompanyInformationPages, p => p.CompanyInformationPageLinks);
editHints.AddConnection(m => m.Layout.NewsPages, p => p.NewsPageLinks);
editHints.AddConnection(m => m.Layout.CustomerZonePages, p => p.CustomerZonePageLinks);
}
return View(model);
}
}
Вам нужно будет применить аналогичный шаблон к другим местам кода, ссылающимся на SiteDefinition.Current. Для SiteDefinition.Current.RootPage его можно заменить на ContentReference.RootPage.
Модернизация внедрения зависимостей
Расположение службы с использованием InitializationEngined.Locate устарело. Вместо этого используйте внедрение конструктора, чтобы получить экземпляр IServiceProvider.
-
До: context.Locate.Advanced.GetInstance
() -
После: внедрить IServiceProvider и вызвать serviceProvider.GetRequiredService.
() В IInitializationModule вы можете получить к нему доступ через context.Services.
Другие небольшие изменения API
Шаг 4. Обновления конфигурации
Далее нам нужно внести несколько изменений в Startup.cs и appSetting.json.
-
Включить обновление совместимости базы данных: в Startup.cs добавьте следующее, чтобы разрешить автоматическое обновление уровня совместимости базы данных.
services.Configure(options => { options.UpdateDatabaseCompatibilityLevel = true; }); -
Настроить график контента: Content Graph включен по умолчанию в предварительной версии CMS 13 и не может быть отключен. Вероятно, это изменится в последующих выпусках. Вы должны добавить свои учетные данные в appSettings.json.
"Optimizely": { "ContentGraph": { "GatewayAddress": "https://staging.cg.optimizely.com", "AllowSendingLog": "true", "SingleKey": "INSERT SINGLEKEY HERE", "AppKey": "INSERT APPKEY HERE", "Secret": "INSERT SECRET HERE" } } -
Установить группы посетителей: из-за известной проблемы в предварительной версии система меню не будет отображаться правильно, если не установлены группы посетителей. Добавьте это в Startup.cs
services.AddVisitorGroups();
Шаг 5. Исправление ошибки 404 после обновления
После внесения всех изменений запустите приложение:
Вы заметите, что сайт возвращает 404 Не найден ошибка. Это ожидаемо. Перенесенная база данных по-прежнему имеет старую конфигурацию SiteDefinition, которая не соответствует новой модели приложения.
Выполните следующие действия, чтобы исправить это:
-
Перейдите в интерфейс администратора CMS:
https://localhost:5000/Optimizely/CMS. -
Перейти к Настройки > Приложения. Если страница не отображается, очистите кеш браузера и перезагрузите страницу. Вы увидите приложение «Headless» по умолчанию.
-
Отредактируйте приложение и нажмите Удалить приложение.
-
Нажмите Создать новое приложение.
-
Отредактируйте только что созданное новое приложение «В процессе».
Ваш сайт Alloy теперь должен корректно отображаться во внешнем интерфейсе, а предварительный просмотр в режиме редактирования будет работать.
Заключение
Поздравляем! Вы успешно обновили свой сайт Alloy до CMS 13. Этот процесс подчеркивает ключевые архитектурные изменения в новой версии, в частности переход к составной модели приложения и модернизированным API. Теперь вы готовы изучить новые функции и возможности Optimizely CMS 13.
Важное примечание: шаги, описанные в этом руководстве, предназначены для разработчиков, желающих изучить предварительную версию CMS 13 с помощью шаблона Alloy. Это неполная предварительная версия, и эти инструкции не рекомендуется использовать в реальном проекте разработки и, тем более, на работающем производственном сайте. Мы расскажем больше по мере приближения к дате выпуска CMS 13.
23 января 2026 г.
Читайте также

