Passo a passo: baixar assemblies satélite sob demanda com a API de implantação do ClickOnce usando o Designer
Os aplicativos do Windows Forms Windows Forms podem ser configurados para várias culturas por meio do uso de assemblies satélites. Um assembly satélite contém recursos de aplicativo para uma cultura diferente da cultura padrão do aplicativo.
Conforme abordado em Localizando aplicativos do ClickOnce, você pode incluir vários assemblies satélite para várias culturas na mesma implantação do ClickOnce. Por padrão, o ClickOnce baixará todos os assemblies satélite em sua implantação para o computador cliente, embora um cliente provavelmente precise de apenas um assembly satélite.
Este passo a passo demonstra como marcar seus assemblies satélite como opcionais e baixar somente o assembly de que o computador cliente precisa para as configurações de cultura atuais.
Observação
A classe ApplicationDeployment e as APIs no namespace System.Deployment.Application não têm suporte no .NET Core e no .NET 5 e versões posteriores. No .NET 7, há suporte para um novo método de acesso às propriedades de implantação de aplicativos. Para obter mais informações, consulte Acessar propriedades de implantação do ClickOnce no .NET. O .NET 7 não oferece suporte ao equivalente aos métodos ApplicationDeployment.
Observação
Para fins de teste, os exemplos de código a seguir definem programaticamente a cultura como ja-JP
. Consulte a seção "Próximas etapas" neste tópico para obter informações sobre como ajustar esse código para um ambiente de produção.
Para marcar assemblies satélite como opcionais
Compile o projeto. Isso gerará assemblies satélite para todas as culturas para as quais você está localizando.
Clique com o botão direito do mouse no nome do projeto no Gerenciador de Soluções e clique em Propriedades.
Clique na guia Publicar e em Arquivos de Aplicativo.
Marque a caixa de seleção Mostrar todos os arquivos para exibir os assemblies satélite. Por padrão, todos os assemblies satélite serão incluídos em sua implantação e ficarão visíveis nesta caixa de diálogo.
Um assembly satélite terá um nome no formato <isoCode>\ApplicationName.resources.dll, em que <isoCode> é um identificador de idioma no formato RFC 1766.
Clique em Novo na lista Grupo de Download para cada identificador de idioma. Quando receber um prompt solicitando um nome de grupo de download, insira o identificador do idioma. Por exemplo, para um assembly satélite japonês, você especificaria o nome de grupo de download
ja-JP
.Feche a caixa de diálogo Arquivos de Aplicativo.
Para baixar assemblies satélite sob demanda em C#
Abra o arquivo Program.cs. Se você não vir esse arquivo no Gerenciador de Soluções, selecione seu projeto e, no menu Projeto, clique em Mostrar Todos os Arquivos.
Use o código a seguir para baixar o assembly satélite apropriado e iniciar o aplicativo.
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 baixar assemblies satélite sob demanda no Visual Basic
Na janela Propriedades do aplicativo, clique na guia Aplicativo.
Na parte inferior da página da guia, clique em Exibir Eventos do Aplicativo.
Adicione as importações a seguir ao início do arquivo ApplicationEvents.VB.
Imports System.Deployment.Application Imports System.Globalization Imports System.Threading
Adicione o código a seguir à 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
Próximas etapas
Em um ambiente de produção, você provavelmente precisará remover a linha nos exemplos de código que define CurrentUICulture como um valor específico, pois os computadores cliente terão o valor correto definido por padrão. Quando o aplicativo for executado em um computador cliente japonês, por exemplo, CurrentUICulture será ja-JP
por padrão. Fazer essa definição programaticamente é uma boa forma de testar seus assemblies satélite antes de implantar o aplicativo.