Udostępnij za pośrednictwem


Przewodnik: pobieranie zestawów satelickich na żądanie przy użyciu interfejsu API wdrażania ClickOnce przy użyciu Projektant

Aplikacje Windows Forms można skonfigurować dla wielu kultur za pomocą zestawów satelickich. Zestaw satelitarny to zestaw zawierający zasoby aplikacji dla kultury innej niż domyślna kultura aplikacji.

Zgodnie z opisem w temacie Lokalizowanie aplikacji ClickOnce można uwzględnić wiele zestawów satelitarnych dla wielu kultur w ramach tego samego wdrożenia Technologii ClickOnce. Domyślnie funkcja ClickOnce pobierze wszystkie zestawy satelitarne we wdrożeniu na maszynę kliencką, chociaż jeden klient prawdopodobnie będzie wymagał tylko jednego zestawu satelitarnego.

W tym przewodniku pokazano, jak oznaczyć zestawy satelitarne jako opcjonalne i pobrać tylko zestaw, który maszyna kliencka potrzebuje dla bieżących ustawień kultury.

Uwaga

Klasy ApplicationDeployment i interfejsy API w System.Deployment.Application przestrzeni nazw nie są obsługiwane w wersjach .NET Core i .NET 5 i nowszych. W programie .NET 7 jest obsługiwana nowa metoda uzyskiwania dostępu do właściwości wdrażania aplikacji. Aby uzyskać więcej informacji, zobacz Access ClickOnce deployment properties in .NET (Uzyskiwanie dostępu do właściwości wdrożenia ClickOnce na platformie .NET). Platforma .NET 7 nie obsługuje odpowiedników metod ApplicationDeployment.

Uwaga

W celach testowych następujące przykłady kodu programowo ustawiają kulturę na ja-JPwartość . Zobacz sekcję "Następne kroki" w dalszej części tego tematu, aby uzyskać informacje na temat dostosowywania tego kodu dla środowiska produkcyjnego.

Aby oznaczyć zestawy satelitarne jako opcjonalne

  1. Skompiluj projekt. Spowoduje to wygenerowanie zestawów satelickich dla wszystkich kultur, do których się lokalizujesz.

  2. Kliknij prawym przyciskiem myszy nazwę projektu w Eksplorator rozwiązań, a następnie kliknij polecenie Właściwości.

  3. Kliknij kartę Publikowanie , a następnie kliknij pozycję Pliki aplikacji.

  4. Zaznacz pole wyboru Pokaż wszystkie pliki, aby wyświetlić zestawy satelitarne. Domyślnie wszystkie zestawy satelitarne będą uwzględniane we wdrożeniu i będą widoczne w tym oknie dialogowym.

    Zestaw satelitarny będzie miał nazwę w postaci <isoCode>\ApplicationName.resources.dll, gdzie <isoCode> jest identyfikatorem języka w formacie RFC 1766.

  5. Kliknij pozycję Nowy na liście Pobierz grupę dla każdego identyfikatora języka. Po wyświetleniu monitu o nazwę grupy pobierania wprowadź identyfikator języka. Na przykład w przypadku japońskiego zestawu satelitarnego należy określić nazwę ja-JPgrupy pobierania .

  6. Zamknij okno dialogowe Pliki aplikacji.

Aby pobrać zestawy satelitarne na żądanie w języku C#

  1. Otwórz plik Program.cs. Jeśli ten plik nie jest widoczny w Eksplorator rozwiązań, wybierz projekt, a następnie w menu Projekt kliknij pozycję Pokaż wszystkie pliki.

  2. Użyj poniższego kodu, aby pobrać odpowiedni zestaw satelitarny i uruchomić aplikację.

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

Aby pobrać zestawy satelitarne na żądanie w Visual Basic

  1. W oknie Właściwości aplikacji kliknij kartę Aplikacja.

  2. W dolnej części strony karty kliknij pozycję Wyświetl zdarzenia aplikacji.

  3. Dodaj następujące importy na początku pliku ApplicationEvents.VB .

    Imports System.Deployment.Application
    Imports System.Globalization
    Imports System.Threading
    
  4. Dodaj poniższy kod do klasy 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
    

Następne kroki

W środowisku produkcyjnym prawdopodobnie trzeba będzie usunąć wiersz w przykładach kodu, który ustawia CurrentUICulture wartość na określoną wartość, ponieważ maszyny klienckie będą domyślnie miały prawidłową wartość ustawioną. Gdy aplikacja działa na japońskiej maszynie klienckiej, na przykład będzie CurrentUICulture ja-JP domyślnie. Ustawienie go programowo to dobry sposób na przetestowanie zestawów satelickich przed wdrożeniem aplikacji.