Procédure pas à pas : Téléchargement d’assemblys satellites à la demande avec l’API du déploiement ClickOnce

Les applications Windows Forms peuvent être configurées pour plusieurs cultures à l’aide d’assemblys satellites. Un assembly satellite contient des ressources d’application pour une culture autre que la culture par défaut de l’application.

Comme indiqué dans la section Localiser des applications ClickOnce, vous pouvez inclure plusieurs assemblys satellites pour plusieurs cultures au sein du même déploiement. Par défaut, ClickOnce télécharge tous les assemblys satellites de votre déploiement sur l’ordinateur client, même si un seul client n’a probablement besoin que d’un assembly satellite.

Cette procédure pas à pas explique comment marquer vos assemblys satellites comme facultatifs et télécharger uniquement l’assembly dont a besoin un ordinateur client pour ses paramètres de culture actuels. La procédure suivante utilise les outils disponibles dans le SDK Windows. Vous pouvez également effectuer cette tâche dans Visual Studio. Consultez également Procédure pas à pas : télécharger des assemblys satellites à la demande avec l’API de déploiement ClickOnce à l’aide du concepteur ou Procédure pas à pas : télécharger des assemblys satellites à la demande avec l’API de déploiement ClickOnce à l’aide du concepteur.

Notes

La classe ApplicationDeployment et les API de l’espace de noms System.Deployment.Application ne sont pas prises en charge dans .NET Core, .NET 5 et les versions ultérieures. Dans .NET 7, une nouvelle méthode d’accès aux propriétés de déploiement d’application est prise en charge. Pour plus d’informations, consultez Accéder aux propriétés de déploiement ClickOnce dans .NET. .NET 7 ne prend pas en charge l’équivalent des méthodes ApplicationDeployment.

Remarque

À des fins de test, l’exemple de code suivant affecte par programmation la valeur ja-JPà la culture. Consultez la section « Étapes suivantes » plus loin dans cette rubrique pour plus d’informations sur l’adaptation de ce code à un environnement de production.

Prérequis

Cette rubrique suppose que vous savez comment ajouter des ressources localisées à votre application à l’aide de Visual Studio. Pour obtenir des instructions détaillées, consultez Procédure pas à pas : localisation de Windows Forms.

Pour télécharger des assemblys satellites à la demande

  1. Ajoutez le code suivant à votre application pour activer le téléchargement à la demande des assemblys satellites.

    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.Threading;
    using System.Globalization;
    using System.Deployment.Application;
    using System.Reflection;
    
    namespace ClickOnce.SatelliteAssemblies
    {
        static class Program
        {
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("ja-JP");
    
                // Call this before initializing the main form, which will cause the resource manager
                // to look for the appropriate satellite assembly.
                GetSatelliteAssemblies(Thread.CurrentThread.CurrentCulture.ToString());
    
                Application.Run(new Form1());
            }
    
            static void GetSatelliteAssemblies(string groupName)
            {
                if (ApplicationDeployment.IsNetworkDeployed)
                {
                    ApplicationDeployment deploy = ApplicationDeployment.CurrentDeployment;
    
                    if (deploy.IsFirstRun)
                    {
                        try
                        {
                            deploy.DownloadFileGroup(groupName);
                        }
                        catch (DeploymentException de)
                        {
                            // Log error. Do not report error to the user, as there may not be a satellite
                            // assembly if the user's culture and the application's default culture match.
                        }
                    }
                }
            }
    
        }
    }
    
  2. Générez des assemblys satellites pour votre application en utilisant Resgen.exe (Générateur de fichiers de ressources) ou Visual Studio.

  3. Générez un manifeste d’application ou ouvrez votre manifeste d’application existant à l’aide de MageUI.exe. Pour plus d’informations sur cet outil, consultez MageUI.exe (Outil Manifest Generation and Editing, client graphique).

  4. Cliquez sur l’onglet Files .

  5. Cliquez sur le bouton d’ellipse (...) et sélectionnez le répertoire contenant tous les assemblys et fichiers de votre application, y compris les assemblys satellites que vous avez générés à l’aide de Resgen.exe. (Le nom d’un assembly satellite se présente sous la forme <isoCode>\ApplicationName.resources.dll, où <isoCode> est un identificateur de langue au format RFC 1766.)

  6. Cliquez sur Populate pour ajouter les fichiers à votre déploiement.

  7. Cochez la case Optional pour chaque assembly satellite.

  8. Définissez le champ de groupe pour chaque assembly satellite avec la valeur de son identificateur de langue ISO. Par exemple, pour un assembly satellite japonais, spécifiez le nom de groupe de téléchargement ja-JP. Cela permet au code ajouté à l’étape 1 de télécharger l’assembly satellite approprié, en fonction du paramètre de la propriété CurrentUICulture de l’utilisateur.

Étapes suivantes

Dans un environnement de production, vous aurez probablement besoin de supprimer la ligne dans l’exemple de code qui définit CurrentUICulture avec une valeur spécifique, car les ordinateurs clients ont la valeur correcte définie par défaut. Quand votre application s’exécute sur un ordinateur client japonais, par exemple, CurrentUICulture aura la valeur ja-JP par défaut. La définition par programmation de cette valeur est un bon moyen de tester vos assemblys satellites avant de déployer votre application.