Разработка дополнительных пакетов и связанных наборов

Дополнительные пакеты включают в себя содержимое, которое можно интегрировать с главным пакетом. Это полезно для скачивания содержимого (DLC), деления большого приложения на ограничения размера или доставки дополнительного содержимого отдельно от исходного приложения. Дополнительные сведения о необязательных пакетах см . в записи блога: расширение приложения с помощью необязательных пакетов.

Связанные наборы — это расширение необязательных пакетов. Связанные наборы позволяют применять строгий набор версий между основными и необязательными пакетами. Связанные наборы могут иметь разных издателей от основного приложения, если он развернут за пределами Магазина. Дополнительные сведения о связанных наборах см . в записи блога: инструмент для создания связанного набора.

Необязательные пакеты и связанные наборы выполняются внутри контейнера MSIX основного приложения.

Необходимые компоненты

  • Visual Studio 2019 или Visual Studio 2017 (версия 15.1 или более поздняя версия)
  • Windows 10 версии 1703 или более поздней
  • Пакет SDK для Windows 10 версии 1703 или более поздней версии

Чтобы получить все последние средства разработки, см. статью "Загрузки и средства" для Windows 10.

Примечание.

Чтобы отправить приложение, использующее необязательные пакеты и/или связанные наборы в Microsoft Store, вам потребуется разрешение. Необязательные пакеты и связанные наборы можно использовать для бизнес-приложений или корпоративных приложений без разрешения Центра партнеров, если они не отправляются в Магазин. Ознакомьтесь со службой поддержки разработчиков Windows, чтобы получить разрешение на отправку приложения, использующего необязательные пакеты и связанные наборы.

Пример кода

При чтении этой статьи рекомендуется следовать вместе с необязательным примером кода пакета на GitHub, чтобы понять, как работают необязательные пакеты и связанные наборы в Visual Studio.

Дополнительные пакеты

Чтобы создать необязательный пакет в Visual Studio, вам потребуется:

  1. Убедитесь, что для целевой платформы приложения задано значение 10.0.15063.0 или более поздней.
  2. Откройте файл из основного Package.appxmanifest проекта пакета. Перейдите на вкладку "Упаковка" и запишите имя семейства пакетов, которое находится перед символом "_".
  3. В дополнительном проекте пакета щелкните правой кнопкой Package.appxmanifest мыши и выберите "Открыть с > помощью редактора XML (текста).
  4. Найдите в этом файле элемент <Dependencies>. Добавьте следующее и замените [MainPackageDependency]имя семейства пакетов на шаге 2. Это указывает, что необязательный пакет зависит от основного пакета.
    <uap3:MainPackageDependency Name="[MainPackageDependency]"/>
    

Примечание.

Если вы хотите создать необязательный пакет из другого издателя, необходимо указать издателя основного приложения, если они отличаются. Как и так <uap4:MainPackageDependency Name="Main_app" Publisher="CN=Contoso..." />. Это не будет работать, если вы публикуете в Магазине.

После настройки зависимостей пакета с шагами 1–4 можно продолжить разработку, как обычно. Дополнительные сведения см. в записи блога: создание первого необязательного пакета.

Visual Studio можно настроить для повторного развертывания основного пакета при каждом развертывании необязательного пакета. Чтобы задать зависимость сборки в Visual Studio, необходимо:

  1. Щелкните правой кнопкой мыши необязательный проект пакета и выберите "Зависимости проекта сборки > ".
  2. Проверьте проект основного пакета и нажмите кнопку "ОК".

Теперь каждый раз, когда вы вводите F5 или создаете необязательный проект пакета, Visual Studio сначала создаст основной проект пакета. Это обеспечит синхронизацию основного проекта и необязательных проектов.

Связанный набор состоит из основного пакета и необязательного пакета, тесно связанного с метаданными, указанными в appxbundle или MSIXbundle основного пакета. Эти метаданные связывают основной пакет с необязательным пакетом (с помощью имени файла .appxbundle + версии), а необязательный пакет — к основному пакету (используя независимое имя версии). Visual Studio помогает получить правильные метаданные в файлах.

Управление версиями пакетов в связанном наборе синхронизировано таким образом, что не позволит использовать последнюю версию любого пакета до тех пор, пока не будут установлены все связанные пакеты (указанные версией в основном пакете). Пакеты обслуживаются независимо, но пакеты, указанные в наборе, могут не использоваться до тех пор, пока все из них не будут обновлены. Дополнительные сведения о связанных наборах см . в записи блога: инструмент для создания связанного набора.

Чтобы настроить решение приложения для связанных наборов, выполните следующие действия.

  1. Щелкните правой кнопкой мыши проект основного пакета, выберите " Добавить > новый элемент".
  2. В окне найдите установленные шаблоны для .txt и добавьте новый текстовый файл.

    Важно!

    Новый текстовый файл должен называться: Bundle.Mapping.txt.

  3. Bundle.Mapping.txt В файле введите строку [OptionalProjects], за которой следует относительные пути к необязательным проектам пакетов. Ниже приведен пример Bundle.Mapping.txt файла:
    [OptionalProjects]
    "..\ActivatableOptionalPackage1\ActivatableOptionalPackage1.vcxproj"
    "..\ActivatableOptionalPackage2\ActivatableOptionalPackage2.vcxproj"
    

Когда решение настроено таким образом, Visual Studio создаст манифест пакета с именем AppxBundleManifest.xml для основного пакета со всеми необходимыми метаданными для связанных наборов.

Обратите внимание, что, как и необязательные пакеты, Bundle.Mapping.txt файл для связанных наборов будет работать только в Windows 10 версии 1703 или выше. Кроме того, целевая версия платформы приложения должна иметь значение 10.0.15063.0 или более поздней.

Удаление необязательных пакетов

Пользователи могут перейти в свое приложение Параметры и удалить необязательные пакеты. Аналогичным образом разработчики могут использовать RemoveOptionalPackageAsync для удаления списка необязательных пакетов.

PackageCatalog catalog = PackageCatalog.OpenForCurrentPackage();
List<string> optionalList = new List<string>();
optionalList.Add("FabrikamAgeAnalysis_kwpnjs8c36mz0");
    
// Warn user that application will be restarted. 
var result = await catalog.RemoveOptionalPackagesAsync(optionalList);
if (result.ExtendedError != null)
{
    throw removalResult.ExtendedError;
}

Примечание.

В случае связанного набора платформы необходимо перезапустить основное приложение, чтобы завершить удаление, чтобы избежать ситуаций, когда приложение содержит содержимое, загруженное из пакета, который удаляется. Приложения должны уведомить пользователей о необходимости перезапуска приложения перед вызовом API.

Если необязательный пакет является контентом только тогда, разработчик должен явно сообщить платформе, что пакет, который будет удален, "не используется" приложением, прежде чем разработчик удаляет необязательный пакет. Это также позволяет разработчику удалить пакет без перезагрузки.

Известные проблемы

Отладка связанного набора необязательных проектов в настоящее время не поддерживается в Visual Studio. Чтобы обойти эту проблему, можно развернуть и запустить активацию (CTRL+F5) и вручную подключить отладчик к процессу. Чтобы подключить отладчик, перейдите в меню "Отладка" в Visual Studio, выберите "Присоединить к процессу..." и подключите отладчик к основному процессу приложения.