Compartir a través de


Guía práctica: Descarga de ensamblajes satélite bajo demanda con la API de implementación ClickOnce mediante el Diseñador.

Las aplicaciones de Windows Forms se pueden configurar para varias culturas mediante el uso de ensamblados satélite. Un ensamblado satélite es un ensamblado que contiene recursos de aplicación para una referencia cultural distinta de la referencia cultural predeterminada de la aplicación.

Como se discute en Localizar aplicaciones ClickOnce, puede incluir varios ensamblados satélite para varias culturas dentro de la misma implementación de ClickOnce. De forma predeterminada, ClickOnce descargará todos los ensamblados satélite de la implementación en la máquina cliente, aunque probablemente un solo cliente necesitará solo un ensamblado satélite.

En este tutorial se muestra cómo marcar los ensamblados satélite como opcionales y descargar solo el ensamblado que necesita una máquina cliente para su configuración cultural actual.

Nota:

La ApplicationDeployment clase y las API del System.Deployment.Application espacio de nombres no se admiten en .NET Core y .NET 5 ni en versiones posteriores. En .NET 7, se admite un nuevo método de acceso a las propiedades de implementación de aplicaciones. Para obtener más información, consulte Access ClickOnce deployment properties in .NET (Acceso a las propiedades de implementación de ClickOnce en .NET). .NET 7 no admite el equivalente de los métodos ApplicationDeployment.

Nota:

Con fines de prueba, los ejemplos de código siguientes establecen mediante programación la referencia cultural en ja-JP. Consulte la sección "Pasos siguientes" más adelante en este tema para obtener información sobre cómo ajustar este código para un entorno de producción.

Para marcar ensamblajes satélites como opcionales

  1. Compile el proyecto. Esto generará ensamblados satélite para todas las culturas a las que se está localizando.

  2. Haga clic con el botón derecho en el nombre del proyecto en el Explorador de soluciones y haga clic en Propiedades.

  3. Haga clic en la pestaña Publicar y, a continuación, haga clic en Archivos de aplicación.

  4. Active la casilla Mostrar todos los archivos para mostrar ensamblados satélite. De forma predeterminada, todos los ensamblados satélite se incluirán en la implementación y estarán visibles en este cuadro de diálogo.

    Un ensamblado satélite tendrá un nombre en el formato <isoCode>\ApplicationName.resources.dll, donde <isoCode> es un identificador de idioma en formato RFC 1766.

  5. Haga clic en Nuevo en la lista Grupo de descarga para cada identificador de idioma. Cuando se le solicite un nombre de grupo de descarga, escriba el identificador de idioma. Por ejemplo, para un ensamblaje de satélite japonés, especificaría el nombre ja-JP del grupo de descarga.

  6. Cierre el cuadro de diálogo Archivos de aplicación .

Para descargar ensamblados satélite a petición en C#

  1. Abra el archivo Program.cs. Si no ve este archivo en el Explorador de soluciones, seleccione el proyecto y, en el menú Proyecto , haga clic en Mostrar todos los archivos.

  2. Use el código siguiente para descargar el ensamblado satélite adecuado e iniciar la aplicación.

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

Para descargar ensamblados satélite a petición en Visual Basic

  1. En la ventana Propiedades de la aplicación, haga clic en la pestaña Aplicación .

  2. En la parte inferior de la página de pestañas, haga clic en Ver eventos de aplicación.

  3. Agregue las siguientes importaciones al principio del archivo ApplicationEvents.VB .

    Imports System.Deployment.Application
    Imports System.Globalization
    Imports System.Threading
    
  4. Agregue el código siguiente a la MyApplication clase .

    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
    

Pasos siguientes

En un entorno de producción, es probable que tenga que quitar la línea de los ejemplos de código que establece CurrentUICulture en un valor específico, ya que las máquinas cliente tendrán el valor correcto establecido de forma predeterminada. Cuando la aplicación se ejecute en un equipo cliente japonés, por ejemplo, CurrentUICulture será ja-JP de forma predeterminada. Establecerlo mediante programación es una buena manera de probar los ensamblados satélite antes de implementar la aplicación.