Paquetes de recursosResource Packages

Los paquetes de recursos ofrecen una manera excelente de reducir el tamaño del disco de los usuarios mediante la segmentación del idioma o el escalado de un recurso específico en paquetes independientes que Windows descarga automáticamente según la configuración del equipo de los usuarios.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. Si el usuario agrega un nuevo idioma a su lista de idiomas del sistema operativo en la región & configuración de idioma o cambia la configuración de pantalla, en una actualización de almacén automática, el sistema operativo capturará los paquetes de recursos aplicables para todas las aplicaciones instaladas en el 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.

En Windows SDK 10.0.17095.0 ADDRESOURCEPACKAGEASYNC API permite a los desarrolladores instalar un paquete de recursos para una aplicación a petición.In Windows SDK 10.0.17095.0 AddResourcePackageAsync API allows developers to install a resource package for an app on demand.

Cómo usar la API de AddResourcePackageAsyncHow to use the AddResourcePackageAsync API

  • AddResourcePackageAsync toma el PackageFamilyName de la aplicación y el identificador de recurso que identifica de forma única el paquete de recursos que está intentando descargar.AddResourcePackageAsync takes the PackageFamilyName of the application and the resource ID that uniquely identifies the resource package that is trying to download. El identificador de recurso corresponde al elemento ResourceId en el AppxManifest.xml del paquete de recursos.The resource ID corresponds to the ResourceId element in the AppxManifest.xml of the resource package.

  • La aplicación debe reiniciarse para obtener una vista combinada de todos los recursos que están disponibles para la aplicación.The application must restart to get a merged view of all resources that are available to the application. La API ofrece la opción ForceTargetApplicationShutdown que puede pasar para reiniciar la aplicación.The API offers the ForceTargetApplicationShutdown option that can pass to restart the application.

  • Si hay una actualización disponible para la aplicación cuando se está descargando el paquete de recursos, se producirá un error en la API, ya que la versión anterior de la aplicación ya no está disponible.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. Al pasar la marca ApplyUpdateIfAvailable , la API actualizará la aplicación y obtendrá el paquete de recursos solicitado como parte de la misma descarga.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.

  • La API devuelve un progreso de la descarga que se puede mostrar en la aplicación.The API returns a progress for the download that can display in the application. Tenga en cuenta también que en el caso de las aplicaciones publicadas en la tienda, la adquisición de paquetes de recursos se muestra en la página Microsoft Store descargas y actualizaciones y se muestra como una actualización de la aplicación.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. El usuario final puede optar por pausar o cancelar la descarga del paquete de recursos en el Microsoft Store.The end user can choose to pause or cancel the download of the resource package from the Microsoft Store.

EjemploExample

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

ValidaciónValidation

Para la validación local, los desarrolladores pueden crear un archivo. msixbundle o. appxbundle e instalarlo desde la unidad local, un recurso compartido de red o un servidor webserver.For local validation, developers can create an .msixbundle or .appxbundle and install from your local drive, network share or webserver. Cuando la aplicación llama a la API AddResourcePackageAsync, Windows adquirirá el paquete de recursos desde la ubicación donde se instaló la aplicación original.When the app calls the AddResourcePackageAsync API, Windows will acquire the resource package from the location where the original application was installed. Esto hace que la validación sea sencilla.This makes the validation simple. Una vez que esto funciona, la aplicación está lista para implementarse.Once this works, the app is ready to be deployed.

Quitar paquetes de recursosRemoving resource packages

La aplicación puede optar por quitar para quitar los paquetes de recursos que descargó a través de la API de RemoveResourcePackageAsync.The app can choose to remove to remove the resource package(s) it downloaded via the RemoveResourcePackageAsync API. Sin embargo, los paquetes de recursos que se aplican al usuario o al dispositivo como un conjunto no se pueden desinstalar.However, Resource packages that are applicable for the user or the device as a whole cannot be uninstalled.

EjemploExample

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