Come viene generato il manifesto di un pacchetto dell'app da Visual Studio

Quando si compila un progetto con Visual Studio, Visual Studio genera un manifesto del pacchetto (AppxManifest.xml), che contiene le informazioni necessarie al sistema per distribuire, visualizzare o aggiornare un'app piattaforma UWP (Universal Windows Platform) (UWP).

Esistono due tipi di file manifesto del pacchetto dell'app che verranno rilevati quando si sviluppa un'app con Visual Studio

  • Package.appxmanifest
    Si tratta di un file di stile XML che gli sviluppatori usano per configurare i dettagli di un'app, ad esempio informazioni sull'editore, logo, architetture del processore e così via. Si tratta di una versione temporanea e facilmente configurabile del manifesto del pacchetto dell'app usato durante lo sviluppo dell'app.
  • AppxManifest.xml
    Questo file viene generato dal processo Visual Studio compilazione e si basa sulle informazioni contenute nel file Package.appxmanifest. Questa è la versione finale del manifesto del pacchetto dell'app usato con le app pubblicate e caricate in sideloaded. Se vengono apportati aggiornamenti al file Package.appxmanifest, è necessario ricompilare il progetto per visualizzare gli aggiornamenti nel file AppxManifest.xml file.

Per una panoramica del processo di creazione di pacchetti, vedi Creare un pacchetto di un'app UWP con Visual Studio.

Convalida del manifesto dell'applicazione

Prima di poter pubblicare l'applicazione, devi correggere tutti gli errori per cui i controlli di convalida di Visual Studio non vengono superati. Quando Visual Studio genera il manifesto, Visual Studio convalida l'applicazione nei modi seguenti:

  • Convalida sintattica
    Visual Studio verifica che tutti i dati nel manifesto dell'applicazione siano conformi allo schema del manifesto dell'applicazione.
  • Convalida semantica
    Visual Studio fornisce indicazioni sui dati previsti, in base al contesto delle informazioni.

Nota

Se queste sezioni non citano il campo che si sta cercando, vengono generati da dati che potrebbero essere stati configurati separatamente o da un valore predefinito dello schema del manifesto.

Generazione del contenuto del manifesto

Visual Studio compila i campi nelle tabelle seguenti quando genera il file AppxManifest.xml per il pacchetto dell'app.

Identità

La Identity sezione del manifesto dell'app contiene i campi seguenti.

Campo Descrizione
Nome Nome del pacchetto, popolato in modo diverso negli scenari seguenti:
  • Per impostazione predefinita, il valore di questo campo è un GUID generato.
  • Se si associa l'app all'Microsoft Store o si richiama il comando Store -> Crea pacchetti dell'app e quindi si accede con un account per sviluppatore, il valore di questo campo viene recuperato dall'app associata nel Microsoft Store o Partner Center.
  • Se si richiama il comando Store -> Crea pacchetti dell'app ma non si accede con un account sviluppatore, il valore di questo campo viene preso dal manifesto di origine.
Publisher Nome del server di pubblicazione. Questo nome cambia a seconda dei seguenti scenari:
  • Per impostazione predefinita, il valore di questo campo è il tuo nome utente.
  • Se si associa l'app al Microsoft Store o si richiama il comando Store -> Crea pacchetti app e quindi si accede con un account per sviluppatore, il valore di questo campo è l'editore associato all'account.
  • Se si richiama il comando Store -> Crea pacchetti dell'app ma non si accede con un account sviluppatore, il valore di questo campo corrisponde al campo oggetto del certificato di test usato per firmare il pacchetto dell'app.
Visual Studio supporta solo il modulo nome comune (CN) per l'editore e aggiungerà il prefisso "CN=" al campo publisher nel manifesto.
Versione Versione dell'app in fase di costruzione. Questo valore viene in genere incrementato ogni volta che l'app viene modificata e in pacchetto. Per assicurarsi che venga Version incrementato correttamente, usare la finestra di dialogo visualizzata quando si richiama Store -> Crea pacchetti dell'app... per eseguire gli aggiornamenti.
ProcessorArchitecture Valore generato in base alla configurazione di compilazione specificata per il progetto. Se i riferimenti al progetto o i riferimenti a file nel progetto hanno come destinazione un'architettura specifica diversa rispetto al pacchetto dell'app, viene generato un errore di compilazione ed è necessario modificare l'architettura di destinazione del pacchetto dell'app in modo che funzioni per tutti i riferimenti.

Di seguito è riportato un esempio del codice Identity XML di output:

<Identity Name="Microsoft.UWPAppExample"
          Publisher="CN=Microsoft Corporation"
          Version="1.0.0.0"
          ProcessorArchitecture="x86" />

Proprietà

La Properties sezione del manifesto dell'app contiene i campi nella tabella seguente.

Campo Descrizione
PublisherDisplayName Questa stringa viene popolata in modo diverso negli scenari seguenti:
  • Per impostazione predefinita, il valore di questo campo è il tuo nome utente.
  • Se si associa l'app al Microsoft Store o si richiama il comando Store -> Create App Packages e quindi si accede con un account per sviluppatore, il valore di questo campo corrisponde alla stringa PublisherDisplayName associata all'account per sviluppatore.
  • Se si richiama il comando Store - Create App Packages( Store -> Crea pacchetti app) ma non si accede con un account sviluppatore, il valore di questo campo è il nome utente, a meno che non venga specificato diversamente nel file Package.appxmanifest.
DisplayName Questa stringa cambia a seconda dei seguenti scenari:
  • Per impostazione predefinita, il valore di questo campo è il nome del progetto.
  • Se si associa l'app al Microsoft Store o si richiama il comando Store -> Create App Packages e quindi si accede con un account sviluppatore, il valore di questo campo viene popolato in base alle regole seguenti:
    • Se si specifica questo @ valore nel manifesto di origine e il valore inizia con (che indica che si vuole localizzare questo valore), il valore di questo campo corrisponderà a quello specificato.
    • Se l'applicazione selezionata dispone di un solo nome, il valore sarà quel nome.
    • Se l'app selezionata ha più nomi ma il manifesto di origine non è localizzato, il valore viene impostato sul nome visualizzato nel manifesto di origine. In caso contrario, il valore viene impostato sul primo nome riservato.
  • Se si richiama il comando Store -> Crea pacchetti dell'app ma non si accede con un account sviluppatore, il valore di questo campo viene preso dal manifesto di origine.
Logo Un Visual Studio predefinito verrà utilizzato da Assets\StoreLogo.png un modello. Questo valore deve essere personalizzato dallo sviluppatore nel file Package.appxmanifest.

Di seguito è riportato un esempio del codice Properties XML di output:

<Properties>
    <DisplayName>UWP App Example</DisplayName>
    <PublisherDisplayName>Microsoft Corporation</PublisherDisplayName>
    <Logo>Assets\StoreLogo.png</Logo>
</Properties>

Applicazione

Un manifesto dell'app può contenere Application più elementi, ognuno dei quali ha un nome visualizzato nel riquadro nel client. La Application sezione del manifesto dell'app contiene i campi nella tabella seguente.

Campo Descrizione
Id Questa stringa cambia a seconda dei seguenti scenari:
  • Per impostazione predefinita, il valore di questo campo è il nome del progetto.
  • Se si associa l'app al Microsoft Store o si richiama il comando Store -> Crea pacchetti dell'app e quindi si accede con un account per sviluppatore, il valore di questo campo è il nome dell'app /Properties[@DisplayName]/Applications/Application[@DisplayName] selezionata se gli elementi e nel manifesto di origine corrispondono. In caso contrario, il valore rimane lo stesso del manifesto di origine.
  • Se si richiama il comando Store -> Crea pacchetti dell'app ma non si accede con un account sviluppatore, il valore di questo campo è lo stesso del manifesto di origine.
File eseguibile Il valore di questo campo è il nome di output dell'assembly del progetto. Il token eseguibile $targetnametoken$.exe usato nel file manifesto di origine (Package.appxmanifest) viene sostituito con il nome file effettivo quando viene compilato il manifesto.
EntryPoint Questo valore è basato sui valori e ExecutableId generati.

Output di Application esempio:

<Applications>
    <Application Id="App" Executable="UWPAppExample.exe" EntryPoint="UWPAppExample.App">
        <!-- Other elements configured within the Application, such as Extensions, VisualElements, etc. -->
</Applications>

PackageDependency

La PackageDependency sezione contiene tutte le dipendenze Windows della libreria dei componenti per questo pacchetto. Ad esempio, se il progetto contiene un riferimento a WinJS, Visual Studio recupera le informazioni sull'identità del pacchetto delle dipendenze quando viene generato il manifesto. Visual Studio quindi popola questa sezione con i campi NameMinVersion e per ogni pacchetto dipendente.

In un progetto C++ nativo, Visual Studio aggiungerà un riferimento al runtime di Visual C/C++:

<Dependencies>
    <PackageDependency Name="Microsoft.VCLibs.140.00.Debug" MinVersion="14.0.30035.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
</Dependencies>

Windows Runtime di registrazione

È possibile implementare Windows Runtime per le app, ma è necessario registrare tali componenti con il sistema operativo per eseguirli correttamente. Per registrare un Windows Runtime, è necessario inserire le informazioni di registrazione nei file WinMD e nel manifesto dell'app. Se un progetto implementa un Windows Runtime, l'output di compilazione del progetto conterrà un file WinMD. Visual Studio estrae le Windows Runtime di registrazione dal file WinMD e genera gli elementi Extension appropriati nel manifesto dell'app.

Il sistema supporta due forme di server: i server .dll (in-process) e i server .exe (out-of-process). Le informazioni di registrazione richieste da questi server sono simili e devono essere copiate nel manifesto dell'applicazione. Visual Studio supporta la generazione del manifesto solo per i server .dll. Per registrare i server .dll è richiesta l'estensione DLLServer. Per configurare l'estensione DLLServer vengono estratti dal file WinMD i valori seguenti nel manifesto dell'applicazione:

  • DllPath
  • ActivatableClassId
  • ThreadingModel
  • ActivatableClass (attributo ActivatableClassId)

Ecco un esempio di XML di output.

<extension category="Microsoft.Windows.ActivatableClass">
    <dllServer>
        <dllPath>Fabrikam.dll</dllPath>
        <activatableClass activatableClassId="Fabrikam.MyClass" threadingModel="sta" />
    </dllServer>
</extension>

Per altre informazioni su questo argomento, vedere Windows Runtime componenti.

Risorse

La Resources sezione contiene una voce per ogni lingua che l'applicazione supporta. È necessario specificare almeno una lingua delle risorse nel manifesto dell'app. In Visual Studio, l'elenco delle lingue supportate viene automaticamente compilato in base alle informazioni di localizzazione nel progetto. Il token del linguaggio della risorsa "x-generate" usato nel file manifesto di origine (Package.appxmanifest) viene sostituito con il codice lingua effettivo quando viene compilato il manifesto. Ecco un esempio di XML di output.

<Resources>
    <Resource Language="en-us">
    <Resource Language="fr-fr">
</Resources>

La prima voce dell'elenco è la lingua predefinita per l'applicazione.

TargetDeviceFamily

La TargetDeviceFamily sezione contiene i campi seguenti:

  • Nome
  • Versione minima
  • MaxVersionTested
<Dependencies>
    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.22000.0" />
</Dependencies>

Questi elementi vengono popolati MSBuild proprietà.

Vedi anche

Creare il pacchetto di un'app UWP con Visual Studio
Architetture per i pacchetti di app
Riferimento dello schema del manifesto del pacchetto per Windows 10