Pacchetti di risorseResource Packages

I pacchetti di risorse offrono un ottimo modo per ridurre l'impronta del disco degli utenti segmentando la lingua o ridimensionare asset specifici in pacchetti separati che vengono scaricati automaticamente da Windows a seconda della configurazione del computer degli utenti.Resource packages offers a great way to reduce users disk footprint by segmenting language or scale specific asset into separate packages that are downloaded automatically by Windows depending on the users machine configuration. Se l'utente aggiunge una nuova lingua all'elenco di lingue del sistema operativo in un' area & impostazioni della lingua o modifica la configurazione di visualizzazione, tramite un aggiornamento automatico dello Store, il sistema operativo recupererà i pacchetti di risorse applicabili per tutte le app installate nel dispositivo.If the user adds a new language to their list of OS languages in Region & language settings or changes the display configuration, across an automatic store update, the OS will fetch applicable resource packages for all installed apps on the device.

In Windows SDK API AddResourcePackageAsync di 10.0.17095.0 consente agli sviluppatori di installare un pacchetto di risorse per un'app su richiesta.In Windows SDK 10.0.17095.0 AddResourcePackageAsync API allows developers to install a resource package for an app on demand.

Come usare l'API AddResourcePackageAsyncHow to use the AddResourcePackageAsync API

  • AddResourcePackageAsync accetta il packageFamilyName dell'applicazione e l'ID risorsa che identifica in modo univoco il pacchetto di risorse che sta provando a scaricare.AddResourcePackageAsync takes the PackageFamilyName of the application and the resource ID that uniquely identifies the resource package that is trying to download. L'ID risorsa corrisponde all'elemento resourceId nel AppxManifest.xml del pacchetto di risorse.The resource ID corresponds to the ResourceId element in the AppxManifest.xml of the resource package.

  • Per ottenere una visualizzazione unita di tutte le risorse disponibili per l'applicazione, è necessario riavviare l'applicazione.The application must restart to get a merged view of all resources that are available to the application. L'API offre l'opzione ForceTargetApplicationShutdown che può passare per riavviare l'applicazione.The API offers the ForceTargetApplicationShutdown option that can pass to restart the application.

  • 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.If there is an update available for the application when the resource package is being downloaded, the API will fail as the older version of the app is no longer available. Passando il flag ApplyUpdateIfAvailable , l'API aggiornerà l'app e otterrà il pacchetto di risorse richiesto come parte dello stesso download.By passing in the ApplyUpdateIfAvailable flag, the API will update the app as well as get the requested resource package as part of the same download.

  • L'API restituisce uno stato di avanzamento del download che può essere visualizzato nell'applicazione.The API returns a progress for the download that can display in the application. Si noti anche che per le app pubblicate nello Store, l'acquisizione del pacchetto di risorse viene visualizzata nella pagina di download e aggiornamenti Microsoft Store e viene visualizzata come aggiornamento dell'applicazione.Also note that for apps published to the store, the resource package acquisition shows up in the Microsoft Store downloads and updates page and shows up as an update to your application. L'utente finale può scegliere di sospendere o annullare il download del pacchetto di risorse dalla Microsoft Store.The end user can choose to pause or cancel the download of the resource package from the Microsoft Store.

EsempioExample

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

ConvalidaValidation

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.For local validation, developers can create an .msixbundle or .appxbundle and install from your local drive, network share or webserver. Quando l'app chiama l'API AddResourcePackageAsync, Windows acquisisce il pacchetto di risorse dalla posizione in cui è stata installata l'applicazione originale.When the app calls the AddResourcePackageAsync API, Windows will acquire the resource package from the location where the original application was installed. In questo modo la convalida viene semplificata.This makes the validation simple. Al termine dell'operazione, l'app è pronta per essere distribuita.Once this works, the app is ready to be deployed.

Rimozione dei pacchetti di risorseRemoving resource packages

L'app può scegliere di rimuovere per rimuovere i pacchetti di risorse scaricati tramite l' API RemoveResourcePackageAsync.The app can choose to remove to remove the resource package(s) it downloaded via the RemoveResourcePackageAsync API. Tuttavia, non è possibile disinstallare i pacchetti di risorse applicabili per l'utente o il dispositivo come un intero.However, Resource packages that are applicable for the user or the device as a whole cannot be uninstalled.

EsempioExample

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