Создание расширений пакетов для приложений Windows App SDK

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

Note

Расширения пакетов требуют Windows 11 и использования uap17 пространства имен. Подход для совместимости с более ранними версиями см. в расширениях приложений, в которых используется uap3.

Расширения пакетов и расширения приложений

Функция Расширения приложений (uap3) Расширения пакетов (uap17)
Минимальная ОС Windows 10 1607 Windows 11
Объем Отдельно для каждого приложения По пакетам
Отправка контента Только общедоступная папка Полный доступ к содержимому пакета
Пространство имен манифеста uap3:AppExtension uap17:PackageExtension

Объявить хост расширения пакета

PackageExtensionHost Добавьте объявление в манифест ведущего приложения:

<Package xmlns:uap17="http://schemas.microsoft.com/appx/manifest/uap/windows10/17" ...>
  <Applications>
    <Application ...>
      <Extensions>
        <uap17:Extension Category="windows.packageExtensionHost">
          <uap17:PackageExtensionHost>
            <uap17:Name>com.example.myplatform.extensions</uap17:Name>
          </uap17:PackageExtensionHost>
        </uap17:Extension>
      </Extensions>
    </Application>
  </Applications>
</Package>

Объявление расширения пакета

В манифесте пакета расширения:

<Package xmlns:uap17="http://schemas.microsoft.com/appx/manifest/uap/windows10/17" ...>
  <Applications>
    <Application ...>
      <Extensions>
        <uap17:Extension Category="windows.packageExtension">
          <uap17:PackageExtension Name="com.example.myplatform.extensions"
                                   Id="MyExtension"
                                   DisplayName="My Extension"
                                   Description="Adds features to the platform">
            <uap17:Properties>
              <ExtensionType>content</ExtensionType>
              <Version>1.0</Version>
            </uap17:Properties>
          </uap17:PackageExtension>
        </uap17:Extension>
      </Extensions>
    </Application>
  </Applications>
</Package>

Обнаружение расширений пакетов

Используйте тот же API AppExtensionCatalog для обнаружения расширений пакетов во время выполнения. Имя узла соответствует объявленному Name в манифесте:

var catalog = AppExtensionCatalog.Open("com.example.myplatform.extensions");
var extensions = await catalog.FindAllAsync();

foreach (var ext in extensions)
{
    System.Diagnostics.Debug.WriteLine(
        $"Found extension: {ext.DisplayName} ({ext.Id})");

    // Read custom properties
    var properties = await ext.GetExtensionPropertiesAsync();
    // Access properties as needed
}

Лучшие практики

  • Используйте соглашение об именовании обратного домена для имен расширений (например, com.company.app.extensions).
  • Добавьте версионирование в протокол расширения, чтобы хост-приложения могли обрабатывать старые и новые форматы расширений.
  • Проверяйте содержимое расширения перед использованием — расширения поступают из других пакетов, и им не следует слепо доверять.