Пошаговое руководство. Загрузка вспомогательных сборок по требованию с помощью API развертывания ClickOnce с использованием конструктора

Реализовать поддержку нескольких языков и региональных параметров в приложениях Windows Forms можно с помощью вспомогательных сборок.Вспомогательная сборка — это сборка, содержащая ресурсы приложения для языка, отличного от используемого по умолчанию языка приложения.

Как указывалось в разделе Локализация приложений ClickOnce, можно включить несколько вспомогательных сборок для нескольких культур в рамках одного развертывания ClickOnce.По умолчанию ClickOnce загружает все вспомогательные сборки в развертывание на клиентском компьютере, несмотря на то что для одного клиента может потребоваться только одна вспомогательная сборка.

В разборе этого примера демонстрируется способ маркировки вспомогательных сборок как необязательных и загрузка только сборки, необходимой клиентскому компьютеру для текущих параметров культуры.

ПримечаниеПримечание

В целях тестирования в следующих примерах кода программным способом устанавливаются региональные параметры ja-JP.Далее в этой статье приводится раздел "Следующие действия", содержащий сведения о том, как скорректировать этот код для производственной среды.

Обязательные компоненты

В этом разделе предполагается, что уже известно, как в приложение добавить локализованные ресурсы с помощью Visual Studio.Подробные инструкции см. в разделе Пошаговое руководство. Локализация форм Windows Forms.

Пометка вспомогательных меток как необязательные

  1. Построить проект.При этом будут созданы вспомогательные метки для всех региональных параметров, для которых производится локализация.

  2. В обозревателе решений щелкните правой кнопкой мыши имя проекта и выберите Свойства.

  3. Перейдите на вкладку Публикация, а затем выберите Файлы приложения.

  4. Установите флажок Показать все файлы для отображения вспомогательных сборок.По умолчанию все вспомогательные сборки включаются в развертывание и будут видны в этом диалоговом окне.

    Вспомогательная сборка будет иметь имя в формате isoCode\имя_приложения.resources.dll, где isoCode является идентификатором языка в формате RFC 1766.

  5. Выберите Создать... в списке Группа загрузки для каждого идентификатора языка.При запросе на ввод имени группы загрузки введите идентификатор языка.Например, для японской вспомогательной сборки задается имя группы загрузки ja-JP.

  6. Закройте диалоговое окно Файлы приложения.

Загрузка вспомогательных сборок по требованию в C#

  1. Откройте файл Program.cs.Если в обозревателе решений этот файл не виден, выберите проект и в меню Проект выберите Показать все файлы.

  2. Следующий код используется для загрузки соответствующей вспомогательной сборки и запуска приложения.

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

Загрузка вспомогательных сборок по требованию в Visual Basic

  1. В окне Свойства для приложения перейдите на вкладку Приложение.

  2. В нижней части страницы вкладки нажмите кнопку Просмотреть события приложения.

  3. Добавьте следующие операторы импорта в начало файла ApplicationEvents.VB.

    Imports System.Deployment.Application
    Imports System.Globalization
    Imports System.Threading
    
  4. Добавьте в класс 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
    

Следующие действия

В производственной среде, вероятнее всего, потребуется удалить строку в примере кода, в которой для свойства CurrentUICulture устанавливается конкретное значение, поскольку на клиентских машинах правильное значение будет установлено по умолчанию.Например, если приложение выполняется на японской клиентской машине, свойство CurrentUICulture по умолчанию будет иметь значение ja-JP.Программная установка этого значения является хорошим способом проверки вспомогательных сборок перед развертыванием приложения.

См. также

Задачи

Пошаговое руководство. Загрузка вспомогательных сборок по требованию с помощью интерфейса API технологии развертывания ClickOnce

Основные понятия

Локализация приложений ClickOnce