Pacchetti di risorse

I pacchetti di risorse offrono un ottimo modo per ridurre il footprint del disco degli utenti segmentando il linguaggio o ridimensionando asset specifici in pacchetti separati scaricati automaticamente da Windows a seconda della configurazione del computer degli utenti. Se l'utente aggiunge una nuova lingua all'elenco delle lingue del sistema operativo nelle impostazioni di area e lingua o modifica la configurazione dello schermo, in un aggiornamento automatico dello store, il sistema operativo recupererà i pacchetti di risorse applicabili per tutte le app installate nel dispositivo.

In Windows SDK 10.0.17095.0 AddResourcePackageAsync API consente agli sviluppatori di installare un pacchetto di risorse per un'app su richiesta.

Come usare l'API AddResourcePackageAsync

  • AddResourcePackageAsync accetta PackageFamilyName dell'applicazione e l'ID risorsa che identifica in modo univoco il pacchetto di risorse che sta tentando di scaricare. L'ID risorsa corrisponde all'elemento ResourceId nel file AppxManifest.xml del pacchetto di risorse.

  • L'applicazione deve essere riavviata per ottenere una visualizzazione unita di tutte le risorse disponibili per l'applicazione. L'API offre l'opzione ForceTargetApplicationShutdown che può passare per riavviare l'applicazione.

  • Se è disponibile un aggiornamento per l'applicazione quando il pacchetto di risorse viene scaricato, l'API avrà esito negativo perché la versione precedente dell'app non è più disponibile. Passando il flag ApplyUpdateIfAvailable , l'API aggiornerà l'app e otterrà il pacchetto di risorse richiesto come parte dello stesso download.

  • L'API restituisce uno stato di avanzamento per il download che può essere visualizzato nell'applicazione. Si noti anche che per le app pubblicate nello Store, l'acquisizione del pacchetto di risorse viene visualizzata nella pagina download e aggiornamenti di Microsoft Store e viene visualizzata come aggiornamento all'applicazione. L'utente finale può scegliere di sospendere o annullare il download del pacchetto di risorse da Microsoft Store.

Esempio

 private async void DownloadGermanResourcePackage(object sender, RoutedEventArgs e)
{            
    // ResourceId that is unique to the resource package
    string resourceId = "split.language-de";
    // Warn user that application will need to restart.
    // To take update if available pass in the ApplyUpdateIfAvailable flag
    var packageCatalog = PackageCatalog.OpenForCurrentPackage();
    PackageCatalogAddResourcePackageResult result = await packageCatalog.AddResourcePackageAsync("29270depappf.CaffeMacchiato_gah1vdar1nn7a", resourceId, 
        AddResourcePackageOptions.ApplyUpdateIfAvailable | AddResourcePackageOptions.ForceTargetApplicationShutdown)
        .AsTask<PackageCatalogAddResourcePackageResult, PackageInstallProgress>(new Progress
        (progress =>;
        {
                // Draw progress
        }));

        if (result.ExtendedError != null)
        {
                //Display error or retry if needed
        }
}

Convalida

Per la convalida locale, gli sviluppatori possono creare un file con estensione msixbundle o appxbundle e installarlo dall'unità locale, dalla condivisione di rete o dal server Web. Quando l'app chiama l'API AddResourcePackageAsync, Windows acquisirà il pacchetto di risorse dal percorso in cui è stata installata l'applicazione originale. In questo modo la convalida è semplice. Una volta eseguita questa operazione, l'app è pronta per la distribuzione.

Rimozione di pacchetti di risorse

L'app può scegliere di rimuovere i pacchetti di risorse scaricati tramite l'API RemoveResourcePackageAsync. Tuttavia, i pacchetti di risorse applicabili per l'utente o il dispositivo nel suo complesso non possono essere disinstallati.

Esempio

 private async void RemoveResourcePackage(object sender, RoutedEventArgs e)
{            
    var packageCatalog = PackageCatalog.OpenForCurrentPackage();
    List resourcePackagesToRemove = new List();
    resourcePackagesToRemove.Add("split.language-de");
    //Warn user that application will be restarted
    var removePackageResult = await packageCatalog.RemoveResourcePackagesAsync(resourcePackagesToRemove);
    if (removePackageResult.ExtendedError != null)
    {
        // display error
    }
}