Udostępnij za pośrednictwem


Tworzenie i hostowanie rozszerzenia pakietu

W tym artykule pokazano, jak utworzyć rozszerzenie pakietu systemu Windows 11 i hostować je w aplikacji. Rozszerzenia pakietów są obsługiwane w aplikacjach platformy UWP i spakowanych aplikacjach klasycznych.

Rozszerzenia pakietów są podobne do rozszerzenia aplikacji, ale mają większą elastyczność. Każdy pakiet z deklaracją rozszerzenia może teraz bezproblemowo udostępniać zawartość i zdarzenia wdrażania z aplikacją hosta. Ta funkcja wykracza poza pakiety aplikacji, obejmujące główne, opcjonalne, struktury i pakiety zasobów. Podczas gdy rozszerzenia pakietów są deklarowane przy użyciu innego zestawu elementów XML, implementacja, zarządzanie i debugowanie rozszerzeń pakietów są tymi samymi rozszerzeniami aplikacji. Aby uzyskać więcej informacji na temat rozszerzeń aplikacji, zobacz Tworzenie i hostowanie rozszerzenia aplikacji.

Rozszerzenie pakietu jest teraz dostępne w systemie Windows 11 Server i będzie dostępne dla systemu Windows 11 w przyszłej wersji.

Deklarowanie pakietu jako hosta rozszerzenia

Aplikacja identyfikuje się jako host rozszerzenia pakietu, deklarując <PkgExtensionHost> element w pliku Package.appxmanifest.

Poniżej przedstawiono przykładową deklarację rozszerzenia pakietu w pliku Package.appxmanifest.

 <Package 
   ... 
   xmlns:uap17="http:schemas.microsoft.com/appx/manifest/uap/windows10/17" 
   IgnorableNamespaces="uap uap17"> 
   ... 
   <Extensions> 
    <uap17:Extension Category="windows.packageExtensionHost">
      <uap17:PackageExtensionHost>
        <uap17:Name>com.microsoft.mathext</uap17:Name>
      </uap17:PackageExtensionHost>
    </uap17:Extension>
   </Extensions> 
     ... 
 </Package> 

Zwróć uwagę na xmlns:uap17="http://..." oraz obecność uap17 w IgnorableNamespaces. Są one niezbędne, ponieważ używamy przestrzeni nazw uap17.

<uap17:Extension Category="windows.packageExtensionHost"> identyfikuje ten pakiet jako host rozszerzenia.

Element Name w pliku <uap17:PackageExtensionHost> to nazwa kontraktu rozszerzenia. Gdy rozszerzenie określa tę samą nazwę kontraktu rozszerzenia, host będzie mógł go znaleźć. Zgodnie z konwencją zalecamy utworzenie nazwy kontraktu rozszerzenia przy użyciu nazwy aplikacji lub wydawcy, aby uniknąć potencjalnych kolizji z innymi nazwami kontraktów rozszerzeń.

W tym samym pakiecie można zdefiniować wiele hostów i wielu rozszerzeń. W tym przykładzie deklarujemy jednego hosta. Rozszerzenie jest zdefiniowane w innym pakiecie.

Deklarowanie pakietu jako rozszerzenia

Pakiet identyfikuje się jako rozszerzenie pakietu, deklarując <uap17:PackageExtension> element w pliku Package.appxmanifest. W poniższym przykładzie pokazano przykładowy pakiet deklarujący się jako rozszerzenie

 <Package 
   ... 
   xmlns:uap17="http:schemas.microsoft.com/appx/manifest/uap/windows10/17" 
   IgnorableNamespaces="uap uap17"> 
   ... 
   <Extensions> 
     <uap17:Extension Category="windows.packageExtension"> 
       <uap17:PackageExtension Name="com.microsoft.ai.aiexplorer.model" 
           Id="power" 
           DisplayName="x^y" 
           PublicFolder="Public"
		   Description="Exponent"> 
             <uap17:Properties> 
                 <Service>com.microsoft.powservice</Service>
             </uap17:Properties> 
       </uap17:PackageExtension> 
     </uap17:Extension> 
   </Extensions> 
     ... 
 </Package> 

Ponownie zwróć uwagę na wiersz xmlns:uap17="http://..." i obecność uap17 w IgnorableNamespaces. Są one niezbędne, ponieważ używamy przestrzeni nazw uap17.

<uap17:Extension Category="windows.packageExtension"> identyfikuje ten pakiet jako rozszerzenie.

Znaczenie atrybutów <uap17:PackageExtension> jest następujące

Atrybut Opis Wymagane
Nazwa Jest to nazwa kontraktu rozszerzenia. Gdy jest ona zgodna z nazwą zadeklarowaną na hoście, ten host będzie mógł znaleźć to rozszerzenie. ✔️
identyfikator Jednoznacznie identyfikuje to rozszerzenie. Ponieważ istnieje wiele rozszerzeń, które używają tej samej nazwy kontraktu rozszerzenia (wyobraź sobie aplikację do malowania, która obsługuje kilka rozszerzeń), możesz użyć identyfikatora, aby je odróżnić. Hosty rozszerzeń aplikacji mogą użyć identyfikatora, aby wywnioskować coś o typie rozszerzenia. Na przykład, można mieć jedno rozszerzenie przeznaczone dla komputerów stacjonarnych i drugie dla urządzeń przenośnych, gdzie identyfikator pełni rolę wyróżnika. Możesz również użyć elementu właściwości omówionego poniżej. ✔️
Nazwa wyświetlana Za pomocą aplikacji hosta można zidentyfikować rozszerzenie dla użytkownika. Jest to możliwe do wykonywania zapytań z nowego systemu zarządzania zasobami (ms-resource:TokenName) na potrzeby lokalizacji. Zlokalizowana zawartość jest ładowana z pakietu rozszerzenia aplikacji, a nie z aplikacji hosta.
Opis Można użyć z aplikacji hosta do opisania rozszerzenia dla użytkownika. Jest to możliwe do wykonywania zapytań z nowego systemu zarządzania zasobami (ms-resource:TokenName) na potrzeby lokalizacji. Zlokalizowana zawartość jest ładowana z pakietu rozszerzenia aplikacji, a nie z aplikacji hosta.
Publiczny folder Nazwa folderu względem katalogu głównego pakietu, w którym można udostępniać zawartość hostowi rozszerzenia. Zgodnie z konwencją nazwa to "Publiczna", ale można użyć dowolnej nazwy zgodnej z folderem w rozszerzeniu. ✔️

<uap17:Properties> jest opcjonalnym elementem zawierającym niestandardowe metadane, które hosty mogą odczytywać w czasie wykonywania. W przykładzie kodu rozszerzenie jest implementowane jako usługa app service, więc host potrzebuje sposobu na uzyskanie nazwy tej usługi app service, aby mogła ją wywołać. Nazwa usługi aplikacji jest określona w elemencie <Service>, który sami zdefiniowaliśmy (mogliśmy ją nazwać, jak tylko chcieliśmy). Host w przykładzie kodu wyszukuje tę właściwość w czasie wykonywania, aby poznać nazwę usługi App Service.

Uwagi

Ten temat zawiera wprowadzenie do rozszerzeń pakietów. Implementacja, zarządzanie i debugowanie rozszerzenia pakietu jest podobna do rozszerzenia aplikacji i można się do tego odwoływać tutaj. Najważniejsze kwestie, które należy zwrócić uwagę, to utworzenie hosta i oznaczenie go jako takiego w pliku Package.appxmanifest, utworzenie rozszerzenia i oznaczenie go jako takiego w pliku Package.appxmanifest, określenie, jak zaimplementować rozszerzenie (takie jak usługa aplikacji, zadanie w tle, com lub winRT server lub inny sposób), definiując sposób, w jaki host będzie komunikować się z rozszerzeniami, i używanie interfejsu API PackageExtensions do uzyskiwania dostępu do rozszerzeń i zarządzania nimi.