Пошаговое руководство. Загрузка вспомогательных сборок по требованию с помощью интерфейса API технологии развертывания ClickOnce
Реализовать поддержку нескольких языков и региональных параметров в приложениях Windows Forms можно с помощью вспомогательных сборок. Вспомогательная сборка — это сборка, содержащая ресурсы приложения для языка, отличного от используемого по умолчанию языка приложения.
Как указывалось в разделе Локализация приложений ClickOnce, можно включить несколько вспомогательных сборок для нескольких культур в рамках одного развертывания ClickOnce. По умолчанию ClickOnce загружает все вспомогательные сборки в развертывание на клиентском компьютере, несмотря на то что для одного клиента может потребоваться только одна вспомогательная сборка.
В разборе этого примера демонстрируется способ маркировки вспомогательных сборок как необязательных и загрузка только сборки, необходимой клиентскому компьютеру для текущих параметров культуры. В следующей процедуре используются средства, доступные в Пакет средств разработки программного обеспечения (SDK) для Windows. Эту задачу можно также выполнить в Visual Studio. Дополнительные сведения см. в следующем разделе. Пошаговое руководство. Загрузка вспомогательных сборок по требованию с помощью API развертывания ClickOnce с использованием конструктора и Пошаговое руководство. Загрузка вспомогательных сборок по требованию с помощью API развертывания ClickOnce с использованием конструктора и Пошаговое руководство. Загрузка вспомогательных сборок по требованию с помощью API развертывания ClickOnce с использованием конструктора.
Примечание
В следующем примере кода с целью проверки значение культуры программно установлено равным ja-JP.Далее в этой статье приводится раздел "Следующие действия", содержащий сведения о том, как скорректировать этот код для производственной среды.
Обязательные компоненты
В этой статье предполагается, что уже известно, как в приложение добавить локализованные ресурсы с помощью Visual Studio. Подробные инструкции см. в разделе Пошаговое руководство. Локализация форм Windows Forms.
Чтобы загрузить вспомогательные сборки по требованию
Чтобы включить загрузку вспомогательных сборок по требованию, добавьте в приложение следующий код.
Imports System.Deployment.Application Imports System.Globalization Imports System.Threading Public Class Form1 Shared Sub Main(ByVal args As String()) Application.EnableVisualStyles() Thread.CurrentThread.CurrentUICulture = New CultureInfo("ja-JP") GetSatelliteAssemblies(Thread.CurrentThread.CurrentUICulture.ToString()) Application.Run(New Form1()) 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 error to the user, as there may not be a satellite ' assembly if the user's culture and the application's default culture match. End Try End If End If End Sub End Class
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. } } } } } }
Создайте вспомогательные сборки для приложения с помощью Resgen.exe (генератор файлов ресурсов) или Visual Studio.
Создайте манифест приложения или откройте манифест существующего приложения, пользуясь MageUI.exe. Дополнительные сведения об этом средстве см. в разделе MageUI.exe (средство создания и редактирования манифестов, графический клиент).
Откройте вкладку Файлы.
Нажмите кнопку с многоточием (...) и выберите каталог, содержащий все сборки и файлы приложения, включая вспомогательные сборки, созданные с помощью Resgen.exe. (Вспомогательная сборка будет иметь имя в формате isoCode\имя_приложения.resources.dll, где isoCode — идентификатор языка в формате RFC 1766.)
Нажмите кнопку Заполнить, чтобы добавить файлы в развертывание.
Установите флажок Дополнительная для каждой вспомогательной сборки.
Установите поле группы для каждой вспомогательной сборки равным ISO-идентификатору языка. Например, для японской вспомогательной сборки следовало бы указать имя группы загрузки, равное ja-JP. Это позволит программному коду, добавленному на шаге 1, загрузить подходящую вспомогательную сборку в зависимости от настройки пользовательского свойства CurrentUICulture.
Следующие действия
Скорее всего, в производственной среде потребуется удалить строку в коде примера, где свойство CurrentUICulture устанавливается равным конкретному значению, так как клиентские компьютеры будут иметь правильное значение, заданное по умолчанию. Например, если приложение выполняется на японской клиентской машине, свойство CurrentUICulture по умолчанию будет иметь значение ja-JP. Программная установка этого значения представляет хороший способ проверки вспомогательных сборок перед развертыванием приложения.