Compartilhar via


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

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 na Localização de Aplicativos ClickOnce, você pode incluir vários assemblies satélites para várias culturas na mesma implantação do 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.

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, 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 conjuntos satélites como opcionais

  1. Compile o projeto. Isso gerará assemblies de satélites para todas as culturas para as quais você está realizando a localização.

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

  3. Clique na guia Publicar e clique em Arquivos de Aplicativo.

  4. Marque a caixa de seleção Mostrar todos os arquivos para exibir assemblies satélites. 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.

  5. Clique em Novo na lista Baixar Grupo para cada identificador de idioma. Quando solicitado a obter um nome de grupo de download, insira o identificador de idioma. Por exemplo, para uma montagem satélite japonesa, você especificaria o nome do grupo de download ja-JP.

  6. Feche a caixa de diálogo Arquivos de Aplicativo .

Baixar assemblies satélites 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 fornecido para baixar o assembly satélite apropriado e iniciar 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élites sob demanda no Visual Basic

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

  2. Na parte inferior da página de guias, 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 à 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. Defini-lo programaticamente é uma boa maneira de testar seus assemblies satélites antes de implantar seu aplicativo.