Pacchetti di risorse

I pacchetti di risorse offrono un ottimo modo per ridurre il footprint del disco degli utenti segmentando una lingua o ridimensionando un asset specifico in pacchetti separati scaricati automaticamente da Windows a seconda della configurazione del computer degli utenti. Se l'utente aggiunge una nuova lingua al proprio elenco di lingue del sistema operativo nelle impostazioni della lingua dell'area & 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'API AddResourcePackageAsync di SDK 10.0.17095.0 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 nella 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ò essere passata per riavviare l'applicazione.

  • Se è disponibile un aggiornamento per l'applicazione durante il download del pacchetto di risorse, 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 dell'applicazione. L'utente finale può scegliere di sospendere o annullare il download del pacchetto di risorse dal 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 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. Al termine, 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 all'utente o al 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
    }
}