Tutorial: Descarga de ensamblados satélite a petición con la API de implementación de ClickOnce mediante el diseñador
Las aplicaciones de Windows Forms pueden configurarse para varias referencias culturales utilizando ensamblados satélite. Un ensamblado satélite es un ensamblado que contiene los recursos de aplicación para una referencia cultural que no sea la referencia cultural predeterminada de la aplicación.
Tal y como se describe en Localización de aplicaciones ClickOnce, puede incluir varios ensamblados satélite para varias referencias culturales en la misma implementación de ClickOnce. De forma predeterminada, ClickOnce descargará todos los ensamblados satélite en su implementación en la máquina cliente, aunque un cliente individual probablemente solo requiera un ensamblado satélite.
En este tutorial se demuestra cómo marcar los ensamblados satélite como opcionales y descargar únicamente el ensamblado que necesite un equipo cliente para la configuración de su referencia cultural actual.
Nota
La clase ApplicationDeployment y las API del espacio de nombres System.Deployment.Application no se admiten en .NET Core y .NET 5 y 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 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 siguientes ejemplos de código establecen la referencia cultural en ja-JP
mediante programación. Vea 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 los ensamblados satélite como opcionales
Compile el proyecto. Esto generará los ensamblados satélite para todas las referencias culturales a las que vaya a realizar la localización.
Haga clic con el botón derecho en el nombre del proyecto en el Explorador de soluciones y, a continuación, haga clic en Propiedades.
Haga clic en la pestaña Publicar y, a continuación, haga clic en Archivos de aplicación.
Seleccione la casilla Mostrar todos los archivos para que se muestren los 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.
El nombre de los ensamblados satélite tiene el formato <isoCode>\ApplicationName.resources.dll, donde <isoCode> es un identificador de idioma en formato RFC 1766.
Haga clic en Nuevo en la lista Grupo de descarga para cada identificador de idioma. Cuando se le pida un nombre de grupo de descarga, escriba el identificador de idioma. Por ejemplo, para un ensamblado satélite japonés, debe especificar el nombre de grupo de descarga
ja-JP
.Cierre el cuadro de diálogo Archivos de aplicación.
Para descargar ensamblados satélite a petición en C#
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.
Utilice 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
En la ventana Propiedades de la aplicación haga clic en la pestaña Aplicación.
En la parte inferior de la ficha, haga clic en Ver eventos de aplicaciones.
Agregue las siguientes importaciones al principio del archivo ApplicationEvents.VB.
Imports System.Deployment.Application Imports System.Globalization Imports System.Threading
Agregue el siguiente código a la clase
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
Pasos siguientes
En un entorno de producción, probablemente tenga que quitar la línea en los ejemplos de código que establece CurrentUICulture en un valor específico, porque los equipos 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.