После недавнего обновления решения Optimizely с CMS 11 до CMS 12 поначалу казалось, что все работает нормально. Сайт запустился без ошибок, а интерфейс редактора выглядел нормально.
Однако как только разработка новых функций возобновилась, быстро стало ясно, что что-то не так. Добавление свойства к типу страницы ничего не даст. Ничего нового не появится ни в режиме редактирования, ни в интерфейсе администратора; изменения были проигнорированы.
Отладка проблемы
Исследуя проблему, я заметил следующее предупреждение, неоднократно появляющееся в выходных данных отладки Visual Studio:
EPiServer.DataAbstraction.RuntimeModel.Internal.ContentTypeModelRegister: Warning: Changes in the model were ignored because its version(0.0.0.0) is lower than version in the database(1.0).
Это появлялось в выводе несколько раз. Я знал, что в моем файле проекта для свойств AssemblyVersion и FileVersion установлено значение 1.0.0.0, поэтому я мало что понимал.
Поиск решения
К счастью, у Optimizely есть замечательные разработчики по всему миру и форум, на котором обсуждаются самые странные случаи поведения. В эта темая нашел решение проблемы:
«Удаление
и (если они существуют) из csproj и добавив истинный решил мою проблему».
true
После применения этого изменения и перестройки проекта все стало работать как положено. Новые свойства были зарегистрированы правильно, и Optimizely снова уловил изменения модели.
Почему это происходит?
Основная причина, по-видимому, связана с тем, как метаданные сборки генерируются в современных версиях .NET.
При переходе с .NET Framework на .NET 6+ (в рамках обновления до CMS 12) атрибуты сборки могут обрабатываться по-другому. Если они настроены неправильно, Optimizely может не определить правильную версию сборки и по умолчанию использовать 0.0.0.0.
Этот Сообщение от Microsoft дает подсказку о том, что мне следует попробовать при следующем обновлении .NET Framework.
При переносе кода из .NET Framework в .NET 6 или более поздней версии перед запуском помощника по обновлению .NET выполните одно из следующих действий:
Отключите создание временного файла кода, содержащего атрибуты информации о сборке, установив
GenerateAssemblyInfoкfalseв файле вашего проекта. Это позволяет вам сохранить Информация о сборке файл.
Перенесите настройки в Информация о сборке файл в файл проекта, а затем удалите Информация о сборке файл.
Ещё по этой теме

