Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье приведены важные понятия, связанные с пакетами платформы MSIX. Сведения в этой статье содержат полезный контекст, чтобы лучше понять назначение и структуру функции динамических зависимостей в пакете Windows App SDK и в ОС Windows 11. Эта функция позволяет приложениям ссылаться на пакеты платформы MSIX и использовать их во время выполнения.
Пакеты платформы и граф пакетов
MSIX — это формат пакета, предоставляющий современный интерфейс упаковки и развертывания. Он также предоставляет чистый и надежный способ упаковки распространяемых библиотек, содержимого и компонентов с помощью пакетов платформ MSIX. Пакет платформы MSIX позволяет упакованным приложениям получать доступ к компонентам через один общий источник на устройстве пользователя, а не объединить их в пакет приложения. Общие пакеты фреймворков включают SDK для приложений Windows (включая WinUI3), WinUI2, VCLibsи DirectX Runtime.
Начиная с Windows 8 и далее в Windows 10 и Windows 11, каждый процесс имеет структуру пакетов , которая предоставляет список всех пакетов, доступных для приложения, включая фреймворк, ресурсные, необязательные и основные пакеты. Этот граф позволяет приложению загружать библиотеки DLL, содержимое и объявления классов во время выполнения, предоставляемые указанным пакетом. Исторически эта диаграмма была исправлена во время создания процесса и не было способа изменить ее во время выполнения:
- Для упакованных приложений граф был инициализирован на основе зависимостей пакета, объявленных в элементе PackageDependency в манифесте пакета приложения. При создании упакованного приложения это обычно выполняется за вас во время процесса сборки на основе ссылок и зависимостей проекта.
- Для распакованных приложений граф пакетов был пустым и не мог быть изменен. Неупакованные приложения, таким образом, были ограничены стандартным порядком поиска библиотек DLL и не имели доступа к фреймворкам.
Это ограничение графа статического пакета снимается благодаря введению поддержки динамических зависимостей как в SDK для приложений Windows, так и в Windows 11. Разработчики могут использовать динамические зависимости для ссылки и использования пакетов платформ MSIX из своих приложений во время выполнения. Динамические зависимости удаляют ограничение графа статического пакета из приложений, и разработчики могут решить, как они хотят использовать пакеты платформы.
Основные сценарии для динамических зависимостей
Хотя динамические зависимости позволяют любому приложению добавлять зависимость от фреймворка пакетов во время выполнения, эта функция в основном предназначена для использования приложениями, использующими внешнюю локацию, или неупакованными приложениями. Упакованные приложения по-прежнему могут добавлять статические зависимости через элемент PackageDependency в манифесте пакета.
- Большинство разработчиков будут использовать динамические зависимости только для ссылки на пакет SDK для приложений Windows в приложениях, упакованных с внешним расположением, или в неупакованных приложениях, чтобы приложение могло вызывать API, предоставляемые средой выполнения SDK для приложений Windows. Дополнительные сведения об этом сценарии см. в разделе Использование среды выполнения Windows App SDK для приложений Windows, упакованных с внешним расположением или без упаковки.
- В некоторых случаях разработчикам может потребоваться использовать динамические зависимости, чтобы ссылаться на другой пакет платформы (помимо пакета платформы Windows App SDK) из неупакованного приложения, например, пакет платформы для WinUI2 или среда выполнения DirectX. Дополнительные сведения об этом сценарии см. в разделе "Использование API динамической зависимости" для ссылки на пакеты MSIX во время выполнения.
Модель обслуживания для пакетов платформы
Функция динамических зависимостей сохраняет целостность конвейера обслуживания для пакета платформы, на который ссылается и используется динамически во время выполнения.
Пакеты платформ MSIX поддерживают обслуживание в параллельной модели, то есть каждая версия устанавливается в отдельной папке с версиями. Это позволяет приложениям оставаться в состоянии оставаться и работать, даже если новое приложение устанавливает более новую версию пакета платформы. Операционная система имеет логику для удаления старых версий данного пакета платформы на основе наличия ссылок на время установки, таких как и, а также ссылок на время выполнения, таких как и, для пакета.
- Когда приложение установлено, оно может создать ссылку на время установки в пакет платформы. Эта ссылка сообщает ОС, что приложение имеет зависимость от указанного пакета платформы, чтобы операционная система не удаляла пакет платформы во время установки приложения.
- Если приложению требуется использовать API или содержимое в пакете фреймворка, он может добавить ссылку времени выполнения в пакет фреймворка. Эта ссылка сообщает ОС, что пакет платформы активно используется и обрабатывает любые обновления версий параллельно. Если установлена новая версия пакета платформы, но запущенное приложение имеет более старую версию, ОС не может удалить старую версию до тех пор, пока не будут удалены все ссылки во время выполнения на более раннюю версию.
Например, учитывая этот сценарий:
- приложение A выполняется и использует версию 1.0.0.0 данного пакета фреймворка.
- Приложение B устанавливается и зависит от версии 1.0.0.1 того же пакета платформы.
В этом сценарии обе версии пакета платформы устанавливаются и используются приложениями App A и App B. Однако, когда Приложение A закрывается пользователем, а затем перезапускается, оно получит версию 1.0.0.1 более нового пакета платформы. На этом этапе требование ссылки во время выполнения больше не действительно для фреймворк-пакета версии 1.0.0.0, и ОС может безопасно удалить версию 1.0.0.0. Позже, когда App A и App B удалены пользователем, требование к ссылке на время установки становится недействительным, и операционной системе безопасно полностью удалить пакет фреймворка.
Для упакованных приложений, использующих элемент PackageDependency для указания статических ссылок на пакеты платформ, ссылки на пакеты платформ во время установки отслеживаются ОС при установке или удалении приложения. Для ссылок во время выполнения, которыми управляют с помощью функции динамических зависимостей, ОС знает, когда выполняется упакованное приложение, и не удалит его пакеты фреймворков, когда доступны новые версии.
Связанные темы
- Использование среды выполнения Windows App SDK для приложений, упакованных с использованием внешнего местоположения или неупакованных
- Использовать API динамической зависимости для ссылки на пакеты MSIX во время выполнения
- Руководство по развертыванию Windows App SDK для приложений, зависящих от каркаса, упакованных с внешним местоположением или без упаковки.
- архитектура среды выполнения для пакета SDK для приложений Windows
- Tutorial: использование API начального загрузчика в приложении, упакованным с внешним расположением или в распакованном виде, использующем пакет SDK для приложений Windows
Windows developer