Поделиться через


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

Обновлен: Ноябрь 2007

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

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

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

ms366788.alert_note(ru-ru,VS.90).gifПримечание.

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

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

В этом разделе предполагается, что уже известно, как в приложение добавить локализованные ресурсы с использованием Microsoft Visual Studio 2005. Подробные инструкции см. в разделе Пошаговое руководство. Локализация форм 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