Condividi tramite


Assegnare l'identità al pacchetto tramite impacchettamento con ubicazione esterna in Visual Studio

Per le motivazioni alla base dell'aggiunta dell'identità del pacchetto, oltre alle differenze tra la compilazione di pacchetti di identità in Visual Studio e la compilazione manuale, vedere Panoramica.

Questo argomento descrive come compilare e registrare un pacchetto di identità usando Visual Studio. Per informazioni sulla creazione manuale di un pacchetto di identità, vedere Concedere l'identità del pacchetto con la posizione esterna manualmente.

Questi sono i passaggi descritti in dettaglio in questo argomento per compilare e registrare un pacchetto di identità usando Visual Studio:

  1. Installare i componenti di Visual Studio
  2. Aggiungere un progetto di creazione pacchetti alla soluzione
  3. Configurare il progetto di impacchettamento per la firma
  4. Compilare e testare il progetto di creazione di pacchetti in modalità di rilascio
  5. Registrare il pacchetto di identità nel programma di installazione
  6. Passaggi facoltativi

Installare i componenti di Visual Studio

La creazione di un pacchetto di identità in Visual Studio richiede il progetto di creazione pacchetti di applicazioni Windows e l'estensione Pacchetto con percorso esterno .

Installare i componenti di Windows Application Packaging Project come descritto in Versione e carico di lavoro necessari di Visual Studio.

In Visual Studio, tramite la voce di menu Estensioni>Gestisci estensioni, installare l'estensione Pacchetto con percorso esterno.

Aggiungere un progetto di creazione pacchetti alla soluzione

Per aggiungere un progetto di creazione di pacchetti alla soluzione con un riferimento al progetto di progetto dell'applicazione, vedere Configurare il progetto di creazione pacchetti di applicazioni Windows nella soluzione.

Abilitare la creazione di pacchetti con un percorso esterno facendo clic con il pulsante destro del mouse sul progetto di creazione pacchetti in Esplora soluzioni, passando alla scheda Percorso esterno fornita dall'estensione Pacchetto con percorso esterno , abilitando l'opzione Pacchetto con posizione esterna e salvando le modifiche.

Impostare i campi Nome pacchetto e Nome visualizzato server di pubblicazione del pacchetto di identità facendo doppio clic Package.appxmanifest in Progetto di creazione pacchetti per aprire l'editor del manifesto visivo, passando alla scheda Creazione pacchetti e impostando i campi Nome pacchetto e Nome visualizzato server di pubblicazione sui valori desiderati. Vedere Localizzazione e asset visivi per gli scenari in cui potrebbero essere necessarie la localizzazione e le immagini qui.

Se nel progetto dell'applicazione è presente un manifesto dell'applicazione personalizzato, per informazioni sulla sincronizzazione dei valori con i valori di Package.appxmanifest, vedere Aggiungere metadati di identità ai manifesti dell'applicazione desktop. L'estensione Package with External Location usa App per applicationId.

Se non si dispone di un manifesto dell'applicazione personalizzato, Visual Studio produrrà gli artefatti appropriati durante il processo di compilazione. I progetti .NET incorporano un manifesto per impostazione predefinita, che è in conflitto con gli artefatti del manifesto prodotti. Per risolvere questo problema, fare clic con il pulsante destro del mouse sul progetto, aprire Proprietà e nella scheda Applicazione nella sezione Manifesto modificare Incorpora manifesto con le impostazioni predefinitein Crea applicazione senza manifesto.

Configurare il progetto di packaging per la firma

Generare un certificato per la firma seguendo la procedura guidata Pubblica>creazione pacchetti di app illustrata in Creare un pacchetto di app usando la creazione guidata pacchetti.

Nella prima schermata verificare che l'opzione Sideloading sia selezionata e Abilita aggiornamenti automatici sia deselezionata. Nella seconda schermata, crea un certificato autofirmato, se necessario, quindi fai clic sul pulsante Attendibilità per far sì che sia riconosciuto come attendibile nell'archivio dei certificati delle Persone attendibili della macchina locale. Nella schermata finale, impostare Genera il bundle dell'app su Mai e fare clic su Crea per completare la configurazione della firma.

Compilare e testare il progetto di creazione di pacchetti in modalità di rilascio

Per evitare complicazioni dalle dipendenze in modalità Debug, impostare la configurazione di compilazione sulla modalità Rilascio e compilare il Progetto di Packaging.

La compilazione del progetto di creazione di pacchetti produce una cartella PackageWithExternalLocation nell'output di compilazione. Tale cartella contiene il MSIX file che rappresenta il pacchetto di identità, nonché InstallRemove gli script di PowerShell per registrare e annullare la registrazione del pacchetto di identità generato localmente per il test.

Lo Install script di PowerShell registra il pacchetto di identità generato in locale e lo connette alla cartella di ExternalLocation pari livello per scopi di test. Per testare l'applicazione con identità, eseguire l'eseguibile dell'applicazione dalla cartella ExternalLocation.

Per associare l'identità all'applicazione nell'ambiente di produzione, è necessario spedire il pacchetto di identità generato all'applicazione e registrarlo nel programma di installazione.

Registrare il pacchetto di identità nel programma di installazione

L'ultimo passaggio per associare l'identità all'applicazione consiste nel registrare il pacchetto di identità nel programma di installazione e associarlo alla directory di installazione dell'applicazione.

PowerShell

L'esecuzione di powershell.exe con i parametri corretti è il modo più semplice per registrare il pacchetto. Le linee guida differiscono per le installazioni per utente rispetto a quelle a livello di macchina.

Per-User (PowerShell)

Per registrare il pacchetto di identità durante un'installazione per utente:

powershell.exe -NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command "Add-AppxPackage -Path <PackagePath> -ExternalLocation <ExternalLocation>"
  • Impostare <PackagePath> sul percorso assoluto del pacchetto di identità firmato generato nel passaggio precedente (con il nome del file).
  • Impostare <ExternalLocation> sul percorso assoluto della directory di installazione dell'applicazione (senza nomi eseguibili).

Per annullare la registrazione del pacchetto di identità durante una disinstallazione per utente:

powershell.exe -NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command "Get-AppxPackage <PackageName> | Remove-AppxPackage"
  • Impostare <PackageName> sul nome del pacchetto definito nel manifesto del pacchetto di identità (l'attributo Name dell'elemento Identity )

Per-Machine (PowerShell)

Per registrare il pacchetto di identità durante un'installazione a livello di computer:

powershell.exe -NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command "Add-AppxPackage -Stage <PackagePath> -ExternalLocation <ExternalLocation>; Add-AppxProvisionedPackage -Online -PackagePath <PackagePath>"
  • Impostare <PackagePath> sul percorso assoluto del pacchetto di identità firmato prodotto nel passaggio precedente (con il nome del file).
  • Impostare <ExternalLocation> sul percorso assoluto della directory di installazione dell'applicazione (senza nomi eseguibili).

Per deregistrare il pacchetto di identità durante una disinstallazione per l'intero sistema:

powershell.exe -NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command "$packages = Get-AppxPackage <PackageName>; foreach ($package in $packages) { Remove-AppxProvisionedPackage -PackageName $package.PackageFullName -Online }; foreach ($package in $packages) { Remove-AppxPackage -Package $package.PackageFullName -AllUsers }
  • Impostare <PackageName> sul nome del pacchetto definito nel manifesto del pacchetto di identità (l'attributo Name dell'elemento Identity )

API di PackageManager

Se si preferisce chiamare le API del sistema operativo per registrare e annullare la registrazione del pacchetto di identità, l'API PackageManager fornisce funzionalità equivalenti a PowerShell. Le linee guida differiscono per le installazioni per utente rispetto alle installazioni a livello di macchina.

Di seguito sono riportati frammenti di codice che illustrano l'API. Per il codice pronto per la produzione in C# e C++, vedere App di esempio.

Per-User (GestorePacchetti)

L'elenco di codice seguente illustra la registrazione del pacchetto identity usando il metodo AddPackageByUriAsync e annullando la registrazione del pacchetto identity usando il metodo RemovePackageAsync .

using Windows.Management.Deployment;

...

// Register the identity package during install

var externalUri = new Uri(externalLocation);
var packageUri = new Uri(packagePath);

var packageManager = new PackageManager();

var options = new AddPackageOptions();
options.ExternalLocationUri = externalUri;

await packageManager.AddPackageByUriAsync(packageUri, options);

...

// Unregister the identity package during uninstall

var packageManager = new PackageManager();

var packages = packageManager.FindPackagesForUserWithPackageTypes("", "<IdentityPackageFamilyName>", PackageType.Main);
foreach (var package in packages)
{
  await packageManager.RemovePackageAsync(package.Id.FamilyName);
}

Si notino i dettagli importanti seguenti su questo codice:

  • Impostare externalLocation sul percorso assoluto della directory di installazione dell'applicazione (senza nomi eseguibili)
  • Impostare packagePath sul percorso assoluto del pacchetto di identità firmato prodotto nel passaggio precedente (con il nome del file)
  • L'oggetto <IdentityPackageFamilyName> può essere trovato nell'editor del manifesto visivo in Visual Studio sotto confezionamento>nome della famiglia del pacchetto.

Per-Machine (GestionePacchetti)

L'elenco di codice seguente illustra la registrazione del pacchetto di identità usando i metodi StagePackageByUriAsync e ProvisionPackageForAllUsersAsync e annullando la registrazione del pacchetto identity usando il metodo RemovePackageAsync .

// Register the identity package during install

var externalUri = new Uri(externalLocation);
var packageUri = new Uri(packagePath);

var packageManager = new PackageManager();

var options = new StagePackageOptions();
options.ExternalLocationUri = externalUri;

await packageManager.StagePackageByUriAsync(packageUri, options);
await packageManager.ProvisionPackageForAllUsersAsync(packageFamilyName);

...

// Unregister the identity package during uninstall

var packageManager = new PackageManager();
var packages = packageManager.FindPackagesForUserWithPackageTypes("", "<IdentityPackageFamilyName>", PackageType.Main);
foreach (var package in packages)
{
  await packageManager.DeprovisionPackageForAllUsersAsync(package.Id.FamilyName);
  await packageManager.RemovePackageAsync(package.Id.FamilyName, RemovalOptions.RemoveForAllUsers);
}

Si notino i dettagli importanti seguenti su questo codice:

  • Impostare externalLocation sul percorso assoluto della directory di installazione dell'applicazione (senza nomi eseguibili)
  • Impostare packagePath sul percorso assoluto del pacchetto di identità firmato prodotto nel passaggio precedente (con il nome del file)
  • L'oggetto <IdentityPackageFamilyName> è disponibile nell'editor del manifesto visivo in Visual Studio sotto Confezionamento>Nome della famiglia di pacchetti.

App di esempio

Per le app C# e C++ completamente funzionali che illustrano come registrare un pacchetto di identità, vedere gli esempi packageWithExternalLocation .

Passaggi opzionali

Localizzazione e asset visivi

Alcune funzionalità che comprendono l'identità del pacchetto potrebbero comportare la visualizzazione di stringhe e immagini dal manifesto del pacchetto di identità nel sistema operativo Windows. Per esempio:

  • Un'applicazione che usa le API fotocamera, microfono o posizione avrà un interruttore dedicato in Impostazioni privacy di Windows insieme a una richiesta di consenso negoziata che gli utenti possono usare per concedere o negare l'accesso a tali risorse riservate.
  • Un'applicazione che registra una destinazione di condivisione verrà visualizzata nella finestra di dialogo di condivisione.

Per localizzare le stringhe nel manifesto del pacchetto di identità, vedere Localizzare il manifesto.

Quando si forniscono percorsi alle immagini negli attributi VisualElements nel manifesto del pacchetto di identità, i percorsi specificati devono essere percorsi relativi all'interno della directory in cui è installata l'applicazione che portano a un'immagine .png, .jpgo .jpeg. I nomi degli attributi indicano le dimensioni previste delle immagini (150x150 e 40x40).