Procédure pas à pas : téléchargement d'assemblys satellites à la demande avec l'API du déploiement ClickOnce à l'aide du concepteur

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

Comme indiqué dans Localisation des applications ClickOnce, vous pouvez inclure plusieurs assemblys satellites pour des cultures multiples au sein du 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 client ne requiert probablement qu'un seul assembly satellite.

Cette procédure pas à pas montre comment marquer vos assemblys satellites comme facultatifs, et comment télécharger uniquement l'assembly dont un ordinateur client a besoin pour ses paramètres de culture actuels.

Notes

À des fins de test, les exemples de code suivants ont défini par programme la culture avec la valeur ja-JP. Consultez plus loin la section les « Étapes suivantes » de cette rubrique pour plus d'informations sur la façon d'ajuster le code pour un environnement de production.

Composants 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 marquer les assemblys satellites comme facultatifs

  1. Générez votre projet. Cette action génère des assemblys satellites pour les toutes les cultures que vous localisez.

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

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

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

    Un assembly satellite possède un nom sous la forme isoCode\ApplicationName.resources.dll, où isoCode est un identificateur de langue au format de la RFC 1766.

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

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

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

  1. Ouvrez le fichier Program.cs. Si ce fichier n'apparaît 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 les 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 la page d'onglets, cliquez sur Afficher les événements de l'application.

  3. Ajoutez les importations ci-après 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 devriez vraisemblablement supprimer la ligne des exemples de code qui définit CurrentUICulture avec une valeur spécifique, parce que les ordinateurs clients possèdent la valeur correcte définie par défaut. Lorsque votre application s'exécute sur un ordinateur client japonais, par exemple, CurrentUICulture a par défaut la valeur ja-JP. La définition par programme est un bon moyen de tester vos assemblys satellites avant de déployer votre application.

Voir aussi

Tâches

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

Concepts

Localisation des applications ClickOnce