Linguagem

Passo a passo: Baixe assemblies satélite sob demanda com a API de implantação do ClickOnce usando o Designer

Os aplicativos Windows Forms podem ser configurados para várias culturas por meio do uso de assemblies satélite. Um assembly satélite é um assembly que contém recursos de aplicativo para uma cultura diferente da cultura padrão do aplicativo.

Conforme discutido em Localização de Aplicações ClickOnce, pode incluir múltiplos assemblies satélite para diversas culturas na mesma implantação ClickOnce. Por padrão, ClickOnce baixará todos os assemblies satélite na sua implantação para a máquina cliente, embora um único cliente provavelmente exija apenas um único assembly satélite.

Este passo a passo demonstra como marcar seus assemblies satélite como opcionais e baixar apenas o assembly que uma máquina cliente precisa para suas configurações de cultura atuais.

Observação

A classe <xref:System.Deployment.Application.ApplicationDeployment> e as APIs no namespace <xref:System.Deployment.Application> não são suportadas no .NET Core e no .NET 5 e versões posteriores. No .NET 7, um novo método de acessar propriedades de implantação de aplicativo é suportado. Para obter mais informações, consulte Acessar propriedades de implantação do ClickOnce no .NET. O .NET 7 não suporta o 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" mais adiante neste tópico para obter informações sobre como ajustar esse código para um ambiente de produção.

Para marcar montagens satélite como opcionais

  1. Compile o seu projeto. Isso gerará montagens de satélite para todas as culturas para as quais você está localizando.

  2. Clique com o botão direito do mouse no nome do projeto no Gerenciador de Soluções e clique em Propriedades.

  3. Clique no separador Publicar e, em seguida, clique em Ficheiros de Aplicação.

  4. Marque a caixa de seleção Mostrar todos os arquivos para exibir assemblies satélite. Por padrão, todos os assemblies satélite serão incluídos na sua implantação e ficarão visíveis nesta caixa de diálogo.

    Um conjunto satélite terá um nome na forma <isoCode>\ApplicationName.resources.dll, onde <isoCode> é um identificador de idioma no formato RFC 1766.

  5. Clique em Novo na lista Download Group para cada identificador de idioma. Quando for solicitado um nome de grupo de download, insira o identificador de idioma. Por exemplo, para um satélite assembly japonês, deve-se especificar o nome ja-JP do grupo de download.

  6. Feche a caixa de diálogo Arquivos do aplicativo .

Para baixar montagens satélite sob demanda em C#

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

  2. Use o código abaixo para descarregar o assembly satélite apropriado e iniciar a sua aplicação.

    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

  1. Na janela Propriedades do aplicativo, clique na guia Aplicativo .

  2. Na parte inferior da página da guia, clique em Exibir eventos do aplicativo.

  3. Adicione as seguintes importações ao início do arquivo ApplicationEvents.VB .

    Imports System.Deployment.Application
    Imports System.Globalization
    Imports System.Threading
    
  4. Adicione o seguinte código à MyApplication classe.

    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óximos passos

Em um ambiente de produção, você provavelmente precisará remover a linha nos exemplos de código que define CurrentUICulture para um valor específico, porque as máquinas cliente terão o valor correto definido por padrão. Quando seu aplicativo é executado em uma máquina cliente japonesa, por exemplo, CurrentUICulture será ja-JP por padrão. Configurá-lo programaticamente é uma boa forma de testar os seus assemblies satélite antes de implementar a sua aplicação.