Partager via


Procédure pas à pas : télécharger des assemblys satellites à la demande avec l'API de déploiement ClickOnce en utilisant le Concepteur

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 Localisation d’applications ClickOnce, vous pouvez inclure plusieurs assemblys satellites pour plusieurs cultures au sein d’un même déploiement ClickOnce. Par défaut, ClickOnce télécharge tous les assemblys satellites de votre déploiement sur l’ordinateur client, même si un même client n’a probablement besoin que d’un seul 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.

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, les exemples de code suivants définissent par programmation la culture avec la valeur ja-JP. Consultez la section « Étapes suivantes » plus loin dans cette rubrique pour plus d’informations sur l’adaptation de ce code à un environnement de production.

Pour marquer les assemblys satellites comme étant facultatifs

  1. Générez votre projet. Vous obtenez des assemblys satellites pour toutes les cultures dans lesquelles vous effectuez la localisation.

  2. Cliquez avec le bouton droit sur le nom de votre projet dans l’Explorateur de solutions, puis cliquez sur Propriétés.

  3. Cliquez sur l’onglet Publier, puis sur Fichiers d’application.

  4. Cochez la case Afficher tous les fichiers pour afficher les assemblys satellites. Par défaut, tous les assemblys satellites sont inclus dans votre déploiement et sont visibles dans cette boîte de dialogue.

    Le nom d’un assembly satellite se présente sous la forme <CodeISO>\ApplicationName.resources.dll, où <CodeISO> est un identificateur de langue au format RFC 1766.

  5. Cliquez sur Nouveau dans la liste Groupe de téléchargement pour chaque identificateur de langue. Quand vous êtes invité à entrer un nom de groupe de téléchargement, indiquez l'identificateur de langue. Par exemple, pour un assembly satellite japonais, spécifiez le nom de groupe de téléchargement ja-JP.

  6. Fermez la boîte de dialogue Fichiers d’application.

Pour télécharger des assemblys satellites à la demande en C#

  1. Ouvrez le fichier Program.cs. Si ce fichier ne s’affiche pas dans l’Explorateur de solutions, sélectionnez votre projet et, dans le menu Projet, cliquez sur Afficher tous les fichiers.

  2. Utilisez le code suivant pour télécharger l'assembly satellite approprié et démarrer votre application.

    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 this error to the user, because a satellite
                            // assembly may not exist if the user's culture and the application's
                            // default culture match.
                        }
                    }
                }
            }
    
        }
    }
    

Pour télécharger des assemblys satellites à la demande en Visual Basic

  1. Dans la fenêtre Propriétés de l’application, cliquez sur l’onglet Application.

  2. En bas de cette page, cliquez sur Afficher les événements de l’application.

  3. Ajoutez les importations suivantes au début du fichier ApplicationEvents.VB.

    Imports System.Deployment.Application
    Imports System.Globalization
    Imports System.Threading
    
  4. Ajoutez le code suivant à la classe MyApplication .

    Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
        Thread.CurrentThread.CurrentUICulture = New CultureInfo("ja-JP")
        GetSatelliteAssemblies(Thread.CurrentThread.CurrentUICulture.ToString())
    End Sub
    
    Private Shared Sub GetSatelliteAssemblies(ByVal groupName As String)
        If (ApplicationDeployment.IsNetworkDeployed) Then
    
            Dim deploy As ApplicationDeployment = ApplicationDeployment.CurrentDeployment
    
            If (deploy.IsFirstRun) Then
                Try
                    deploy.DownloadFileGroup(groupName)
                Catch de As DeploymentException
                    ' Log error. Do not report this error to the user, because a satellite
                    ' assembly may not exist if the user's culture and the application's
                    ' default culture match.
                End Try
            End If
        End If
    End Sub
    

Étapes suivantes

Dans un environnement de production, vous aurez probablement besoin de supprimer la ligne dans les exemples 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 est un bon moyen de tester vos assemblys satellites avant de déployer votre application.