Compartilhar via


Passo a passo: baixar assemblies satélites sob demanda com a API de implantação do ClickOnce

Os aplicativos do Windows Forms podem ser configurados para várias culturas mediante o uso de assemblies satélites. 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 Localizar aplicativos ClickOnce, você pode incluir vários assemblies satélites para várias culturas na mesma implantação ClickOnce. Por padrão, o ClickOnce baixará todos os assemblies satélites em sua implantação no computador cliente, embora cada cliente provavelmente exija apenas um assembly satélite.

Este tutorial demonstra como marcar seus assemblies satélites como opcionais e baixar apenas o assembly que uma máquina cliente precisa para suas configurações culturais atuais. O procedimento a seguir usa as ferramentas disponíveis no SDK (Software Development Kit) do Windows. Você também pode executar essa tarefa no Visual Studio. Confira também Passo a passo: baixe assemblies satélites sob demanda com a API de implantação do ClickOnce usando o Designer ou Passo a passo: baixe assemblies satélites sob demanda com a API de implantação do ClickOnce usando o Designer.

Observação

A ApplicationDeployment classe e as APIs no System.Deployment.Application namespace não são compatíveis com .NET Core e .NET 5 e versões posteriores. No .NET 7, há suporte para um novo método de acesso às propriedades de implantação do aplicativo. Para obter mais informações, consulte as propriedades de implantação do Access ClickOnce no .NET. O .NET 7 não dá suporte ao equivalente aos métodos ApplicationDeployment.

Observação

Para fins de teste, o exemplo de código a seguir define 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.

Pré-requisitos

Este tópico pressupõe que você saiba como adicionar recursos localizados ao seu aplicativo usando o Visual Studio. Para obter instruções detalhadas, consulte Passo a passo: localizar formulários do Windows.

Para baixar assemblies de satélites sob demanda

  1. Adicione o código a seguir ao aplicativo para habilitar o download sob demanda de assemblies satélites.

    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 error to the user, as there may not be a satellite
                            // assembly if the user's culture and the application's default culture match.
                        }
                    }
                }
            }
    
        }
    }
    
  2. Gere assemblies satélites para seu aplicativo usando Resgen.exe (Gerador de Arquivos de Recurso) ou Visual Studio.

  3. Gere um manifesto do aplicativo ou abra o manifesto do aplicativo existente usando MageUI.exe. Para obter mais informações sobre essa ferramenta, consulte MageUI.exe (Ferramenta de Geração e Edição de Manifesto, Cliente Gráfico).

  4. Clique na guia Arquivos .

  5. Clique no botão de reticências (...) e selecione o diretório que contém todos os assemblies e arquivos da aplicação, incluindo os assemblies satélites gerados usando Resgen.exe. (Um assembly satélite terá um nome no formato <isoCode>\ApplicationName.resources.dll, em que <isoCode> é um identificador de idioma no formato RFC 1766.)

  6. Clique Preencher para adicionar os arquivos à sua implantação.

  7. Marque a Opcional caixa de seleção para cada assembly satélite.

  8. Defina o campo de grupo para cada satélite assembly como seu identificador de idioma ISO. Por exemplo, para uma montagem de satélites japonesa, você especificaria um nome de grupo de download de ja-JP. Isso permitirá que o código adicionado na etapa 1 baixe o assembly satélite apropriado, dependendo da configuração de propriedade do usuário CurrentUICulture.

Próximas etapas

Em um ambiente de produção, você provavelmente precisará remover a linha no exemplo 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. Definir esse valor programaticamente é uma boa maneira de testar seus assemblies satélites antes de implantar sua aplicação.