Переход со среды выполнения Windows 8.x на UWP

Если у вас имеется универсальное приложение для версии 8.1, ориентированное на Windows 8.1, Windows Phone 8.1 или на обе системы, вы обнаружите, что исходный код можно с легкостью перенести на Windows 10 с помощью уже имеющихся у вас навыков. В Windows 10 вы можете создать приложение UWP для Windows, включающее один пакет приложения, который покупатели могут установить на любое устройство. Подробные сведения о Windows 10, приложениях UWP и концепциях адаптивного кода и пользовательского интерфейса, о которых мы будем говорить в этом руководстве по переносу, см. в разделе Руководство по приложениям UWP.

Выполняя перенос, вы обнаружите, что Windows 10 используют большинство API предыдущих платформ, как и разметку XAML, инфраструктуру пользовательского интерфейса и инструменты. Многое вам покажется знакомым. Как и ранее, вы можете выбрать язык программирования (C++, C# и Visual Basic), который будет использоваться с инфраструктурой пользовательского интерфейса XAML. Первые этапы планирования того, что следует делать с текущим приложением или приложениями, будут зависеть от того, какие типы приложений и проектов у вас имеются. Это объясняется в следующих разделах.

Если у вас универсальное приложение для версии 8.1

Универсальное приложение для версии 8.1 создается из проекта универсального приложения для Windows 8.1. Предположим, что проект называется AppName_81. Он содержит следующие вспомогательные проекты.

  • AppName_81.Windows. Этот проект создает пакет приложения для Windows 8.1.
  • AppName_81.WindowsPhone. Этот проект создает пакет приложения для Windows Phone 8.1.
  • AppName_81.Shared. Этот проект содержит исходный код, файлы разметки и другие ресурсы, которые используются обоими приложениями.

Часто универсальное приложение для Windows 8.1 предлагает одни и те же функции и делает это при помощи одного и того же кода и разметки, как в версии для Windows 8.1, так в версии для Windows Phone 8.1. Такое приложение – идеальный кандидат для переноса в единое приложение для Windows 10, которое ориентировано на универсальное семейство устройств. Оно охватывает самый широкий спектр устройств, на которые его можно установить. По сути, вы переносите содержимое общего проекта. Двумя другими проектами вам пользоваться практически не придется, потому что они практически ничего не содержат.

В других случаях приложение для Windows 8.1 и Windows Phone 8.1 может содержать уникальные функции. Или же они содержат те же самые функции, но реализуют их при помощи разных методов и технологий. В случае таких приложений при переносе вы можете создать одно приложение, которое будет ориентировано на все семейства устройств (в этом случае вам потребуется, чтобы приложение адаптировалось к различным устройствам) или же создать несколько приложений. Например, одно будет предназначено для семейства настольных, а второе — для семейства мобильных устройств. Характер универсального приложения для версии 8.1 определит, какой из этих вариантов подходит вам больше.

  1. Переносите содержимое общего проекта в приложение, ориентированное на все семейства устройств. Если это возможно, сохраняйте любое содержимое проектов для Windows и WindowsPhone и используйте его либо безусловно в приложении, либо условно на том устройстве, на котором оно работает в конкретный момент времени (этот тип поведения называется адаптивным).
  2. Переносите содержимое проекта WindowsPhone в приложение, ориентированное на все семейства устройств. Если это возможно, сохраняйте любое другое содержимое проекта Windows и используйте его безусловно или адаптивно.
  3. Переносите содержимое проекта Windows в приложение, ориентированное на все семейства устройств. Если это возможно, сохраняйте любое другое содержимое проекта WindowsPhone и используйте его безусловно или адаптивно.
  4. Переносите содержимое проекта Windows в приложение, ориентированное на все устройства или на семейство настольных устройств. Также переносите содержимое проекта WindowsPhone в приложение, ориентированное на все устройства или на семейство мобильных устройств. Вы можете создать приложение, используя общий проект, и по-прежнему использовать один и тот же исходный код, файлы разметки и другие ресурсы в обоих приложениях. В качестве альтернативы вы можете создать отдельные решения и так же использовать эти элементы при помощи ссылок.

Если у вас приложение для Windows 8.1

Перенесите проект в приложение, ориентированное на все устройства или семейство настольных устройств. Если вы остановите выбор на поддержке всех устройств и ваше приложение будет вызывать API, реализуемые только на настольных устройствах, вы сможете обрабатывать эти вызовы с помощью адаптивного кода.

Для приложений Windows Phone 8.1

Перенесите проект в приложение, ориентированное на все устройства или семейство мобильных устройств. Если вы остановите выбор на поддержке всех устройств и ваше приложение будет вызывать API, реализуемые только на мобильных устройствах, вы сможете обрабатывать эти вызовы с помощью адаптивного кода.

Адаптация приложения для нескольких форм-факторов

Вариант, выбранный вами в предыдущих разделах, определит спектр устройств, на которых будет работать ваше приложение, и этот спектр может быть очень широк. Даже если вы ограничитесь поддержкой мобильных устройств, вам по-прежнему придется иметь дело с широким диапазоном размеров экрана. Поэтому если приложение будет работать на устройствах тех форм-факторов, которые оно раньше не поддерживало, протестируйте на них пользовательский интерфейс и внесите необходимые изменения, чтобы последний мог адаптироваться к каждому из форм-факторов соответствующим образом. Это можно представить как задачу после переноса. Ряд практических примеров представлен в описании приложений Bookstore2 и QuizGame.

Поуровневый перенос

Для переноса универсального приложения для версии 8.1 в модель приложения UWP вам практически не понадобится новых знаний и навыков. Точно также вы будете использовать большую часть уже имеющегося исходного кода, разметки и шаблонов программного обеспечения.

  • Представление. Представление (вместе с моделью представления) составляет пользовательский интерфейс вашего приложения. В идеале представление состоит из разметки, привязанной к наблюдаемым свойствам модели представления. Другой шаблон (общий и удобный, но только в краткосрочной перспективе) предназначен для императивного кода в файле кода программной части для непосредственного управления элементами пользовательского интерфейса. В любом случае, вашу разметку и оформление пользовательского интерфейса и даже императивный код, который управляет элементами пользовательского интерфейса, будет легко перенести.
  • Модели представления и модели данных. Даже если вы формально не используете шаблоны разделения задач (типа MVVM), в вашем приложении неизбежно присутствует код, который выполняет функцию модели представления и модели данных. Код модели представления использует типы в пространствах имен инфраструктуры пользовательского интерфейса. Код модели представления и код модели данных также используют операционную систему без визуального представления и API .NET Framework (включая API для доступа к данным). И эти API также доступны для приложений UWP, поэтому большая часть кода будет перенесена без изменений.
  • Облачные службы. Вполне возможно, что некоторая часть вашего приложения (а может и большая его часть) выполняется в облаке в форме служб. Часть приложения, запущенная на клиентском устройстве, подключается к ним. Это часть распределенного приложения, скорее всего, останется неизменной при переносе клиентской части. Если у вас ее еще нет, удобным вариантом облачных служб для вашего приложения UWP являются Мобильные службы Microsoft Azure, предоставляющие мощные серверные компоненты, которые ваши приложения могут вызывать для служб, начиная с простых уведомлений для обновления живых плиток и до требующего больших усилий масштабирования, которое может предоставить ферма серверов.

Перед переносом или в процессе переноса подумайте, можно ли улучшить ваше приложение с помощью оптимизации таким образом, чтобы код с похожей целью собирался вместе в уровни, а не был разбросан произвольно. Разложение вашего приложения по уровням, как описано выше, поможет вам сделать приложение более правильным, проверить его, а затем читать и поддерживать его. Вы можете обеспечить повторное использование функционала благодаря шаблону Model-View-ViewModel (MVVM). Этот шаблон хранит части данных, пользовательского интерфейса и бизнес-части вашего приложения отдельно друг от друга. Даже в пользовательском интерфейсе он может хранить состояние и поведение отдельно друг от друга, и отдельно визуальные и доступные для тестирования элементы. Благодаря MVVM, однажды определив логику данных и бизнес-логику, вы сможете использовать ее на всех устройствах вне зависимости от пользовательского интерфейса. Вероятно, вы сможете также в значительной степени использовать ту же самую модель представления и его части на различных устройствах.

Раздел Описание
Перенос проекта У вас есть два варианта разработки процесса переноса. Первый — изменить копии существующих файлов проекта, в том числе манифест пакета приложения (для этого варианта см. сведения об обновлении файлов проекта в разделе Перенос приложений на универсальную платформу Windows (UWP)). Другой вариант — создать проект Windows 10/11 в Visual Studio и скопировать в него файлы.
Устранение неполадок Мы настоятельно рекомендуем прочитать до конца это руководство по переносу, но мы также понимаем, что вы жаждете двигаться вперед и добраться до этапа, на котором выполняется построение и запуск вашего проекта. До этого момента вы можете достичь временного прогресса с помощью комментирования и создания заглушек для любого ненужного кода, а затем вернуться, чтобы уплатить этот долг позже. Таблица симптомов и средств устранения неполадок в этом разделе может быть полезна на этом этапе, хотя она не является заменой прочтению следующих нескольких разделов. Вы всегда можете обратиться к таблице по мере продвижения по последующим разделам.
Перенос XAML и пользовательского интерфейса Практика определения пользовательского интерфейса в форме декларативной разметки XAML очень хорошо преобразуется из универсальных приложений для версии 8.1 в приложения универсальной платформы Windows (UWP). Вы увидите, что большая часть вашей разметки совместима, хотя может потребоваться внести некоторые изменения в ключи системных ресурсов или используемые настраиваемые шаблоны.
Перенос для ввода-вывода, устройств и моделей приложений Код, интегрирующийся с устройством и его датчиками, включает ввод от пользователя и вывод к нему. Он может также включать обработку данных. Но в целом этот код не считается уровнем пользовательского интерфейса или уровнем данных. Этот код включает интеграцию с контроллером вибрации, акселерометром, гироскопом, микрофоном и динамиками (которые могут пересекаться с распознаванием речи и синтезом), (географическим) положением и модальностями ввода, такими как сенсорный ввод, мышь, клавиатура и перо.
Пример: Bookstore1 В этом разделе представлен пример переноса очень простого универсального приложения 8.1 в Windows 10 и Windows 11 приложения UWP. Универсальное приложение версии 8.1 создает один пакет приложения для Windows 8.1, а другой – для Windows Phone 8.1. С Помощью Windows 10 и Windows 11 вы можете создать один пакет приложения, который клиенты могут установить на широкий спектр устройств, и это то, что мы будем делать в этом примере. См. раздел Руководство по приложениям UWP.
Пример: Bookstore2 Это пример, в котором используются данные из элемента управления SemanticZoom. В модели представления каждый экземпляр класса Author представляет группу книг одного автора, а в классе SemanticZoom мы можем просмотреть список книг, сгруппированных по автору, или уменьшить представление, чтобы просмотреть список переходов по авторам.
Пример: QuizGame В этом разделе представлен пример переноса работающего однорангового теста WinRT 8.1 в windows 10 и Windows 11 приложения UWP.

Документация