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

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

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

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

Предварительные требования

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

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

Примечание

Чтобы отправить приложение, использующее необязательные пакеты и(или) связанные наборы, в Microsoft Store, вам потребуется разрешение. Необязательные пакеты и связанные наборы можно использовать для бизнес-приложений (LOB) или корпоративных приложений без разрешения Центра партнеров, если они не отправляются в Магазин. Для получения разрешения на отправку приложений, использующих дополнительные пакеты и связанные наборы, см. раздел Поддержка разработчиков для 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]"/>
    

Примечание

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

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

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

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

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

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

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

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

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

    Важно!

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

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

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

Обратите внимание, что, как и дополнительные пакеты, 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;
}

Примечание

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

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

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

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