Condividi tramite


Creare e ospitare un'estensione del pacchetto

Questo articolo illustra come creare un'estensione del pacchetto di Windows 11 e ospitarla in un'app. Le estensioni dei pacchetti sono supportate nelle app UWP e nelle app desktop in pacchetto.

Le estensioni del pacchetto sono come l'estensione dell'app, ma sono dotate di maggiore flessibilità. Qualsiasi pacchetto con una dichiarazione di estensione può ora condividere facilmente contenuto ed eventi di distribuzione con un'app host. Questa funzionalità si estende oltre i pacchetti dell'app, includendo pacchetti principali, facoltativi, framework e risorse. Mentre le estensioni del pacchetto vengono dichiarate con un set diverso di elementi XML, l'implementazione, la gestione e il debug delle estensioni del pacchetto sono le stesse estensioni dell'applicazione. Per altre informazioni sulle estensioni dell'applicazione, vedere Creare e ospitare un'estensione dell'app.

L'estensione del pacchetto è ora disponibile in Windows 11 Server e sarà disponibile per Windows 11 in una versione futura.

Dichiarare un pacchetto come host di estensione

Un'app si identifica come host di estensione del pacchetto dichiarando l'elemento <PkgExtensionHost> nel file Package.appxmanifest.

Di seguito viene illustrata una dichiarazione di estensione del pacchetto di esempio in un file 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> 

Nota il xmlns:uap17="http://..." e la presenza di uap17 in IgnorableNamespaces. Questi sono necessari perché si usa lo spazio dei nomi uap17.

<uap17:Extension Category="windows.packageExtensionHost"> identifica questo pacchetto come host di estensione.

L'elemento Name in <uap17:PackageExtensionHost> è il nome del contratto di estensione. Quando un'estensione specifica lo stesso nome del contratto di estensione, l'host sarà in grado di trovarlo. Per convenzione, è consigliabile creare il nome del contratto di estensione usando l'app o il nome dell'editore per evitare potenziali conflitti con altri nomi di contratto di estensione.

È possibile definire più host e più estensioni nello stesso pacchetto. In questo esempio viene dichiarato un host. L'estensione è definita in un altro pacchetto.

Dichiarare un pacchetto come estensione

Un pacchetto si identifica come estensione del pacchetto dichiarando l'elemento <uap17:PackageExtension> nel file Package.appxmanifest. L'esempio seguente mostra un pacchetto di esempio dichiarandosi come estensione

 <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> 

Anche in questo caso, notare la xmlns:uap17="http://..." riga e la presenza di uap17 in IgnorableNamespaces. Questi sono necessari perché si usa lo spazio dei nomi uap17.

<uap17:Extension Category="windows.packageExtension"> identifica questo pacchetto come estensione.

Il significato degli <uap17:PackageExtension> attributi è il seguente

Attributo Descrizione Obbligatorio
Nome Si tratta del nome del contratto di estensione. Quando corrisponde al nome dichiarato in un host, tale host sarà in grado di trovare questa estensione. ✔️
ID Identifica in modo univoco questa estensione. Poiché possono essere presenti più estensioni che usano lo stesso nome del contratto di estensione (si supponga che un'app paint supporti diverse estensioni), è possibile usare l'ID per distinguerli. Gli host dell'estensione dell'app possono usare l'ID per dedurre qualcosa sul tipo di estensione. Ad esempio, è possibile avere un'estensione progettata per desktop e un'altra per dispositivi mobili, con l'ID che rappresenta il differenziatore. Si potrebbe anche usare l'elemento Proprietà, illustrato di seguito, per quello. ✔️
Nome visualizzato Puoi usare la tua app host per presentare l'estensione all'utente. È interrogabile da e può utilizzare il nuovo sistema di gestione delle risorse (ms-resource:TokenName) per la localizzazione. Il contenuto localizzato viene caricato dal pacchetto di estensione dell'app, non dall'app host.
Descrizione Può essere utilizzato dalla tua app host per descrivere l'estensione all'utente. È interrogabile da e può utilizzare il nuovo sistema di gestione delle risorse (ms-resource:TokenName) per la localizzazione. Il contenuto localizzato viene caricato dal pacchetto di estensione dell'app, non dall'app host.
CartellaPubblica Nome di una cartella, relativa alla radice del pacchetto, in cui è possibile condividere il contenuto con l'host dell'estensione. Per convenzione, il nome è "Pubblico", ma è possibile usare qualsiasi nome corrispondente a una cartella nell'estensione. ✔️

<uap17:Properties> è un elemento facoltativo che contiene metadati personalizzati che gli host possono leggere in fase di esecuzione. Nell'esempio di codice, l'estensione viene implementata come servizio app in modo che l'host richieda un modo per ottenere il nome del servizio app in modo che possa chiamarlo. Il nome del servizio app è definito nell'elemento <Service>, che abbiamo definito (avremmo potuto chiamarlo in qualsiasi modo volessimo). L'host nell'esempio di codice cerca questa proprietà in fase di esecuzione per apprendere il nome del servizio app.

Osservazioni:

In questo argomento viene fornita un'introduzione alle estensioni dei pacchetti. L'implementazione, la gestione e il debug dell'estensione del pacchetto sono simili a quelli dell'estensione dell'app e si può fare riferimento a qui. Le cose chiave da notare sono la creazione dell'host e contrassegnarlo come tale nel file Package.appxmanifest, creando l'estensione e contrassegnandolo come tale nel file Package.appxmanifest, determinando come implementare l'estensione (ad esempio un servizio app, un'attività in background, un server COM o WinRT o altri mezzi), definendo come l'host comunicherà con le estensioni, e usando l'API PackageExtensions per accedere e gestire le estensioni.