Пошаговое руководство. Скачивание вспомогательных сборок по запросу с помощью API развертывания ClickOnce с помощью конструктора
Приложения Windows Forms можно настроить для нескольких языков и региональных параметров, воспользовавшись вспомогательными сборками. Вспомогательная сборка — это сборка, содержащая ресурсы приложения для языка, отличного от языка и региональных параметров приложения по умолчанию.
Как описано в разделе "Локализация приложений ClickOnce", можно включить несколько вспомогательных сборок для нескольких региональных параметров в одном развертывании ClickOnce. По умолчанию ClickOnce скачивает все вспомогательные сборки в развертывании на клиентский компьютер, хотя для одного клиента, вероятно, потребуется только одна спутниковая сборка.
Это пошаговое руководство показывает, как пометить вспомогательные сборки как необязательные и загрузить только сборку, необходимую клиентскому компьютеру для текущих настроек языка и региональных параметров.
Примечание.
Класс ApplicationDeployment и API в System.Deployment.Application пространстве имен не поддерживаются в .NET Core и .NET 5 и более поздних версиях. В .NET 7 поддерживается новый метод доступа к свойствам развертывания приложения. Дополнительные сведения см. в разделе "Свойства развертывания Access ClickOnce" в .NET. .NET 7 не поддерживает эквивалент методов ApplicationDeployment.
Примечание.
В целях тестирования в следующих примерах кода программным образом задается следующий язык и региональные параметры: ja-JP
. В подразделе «Дальнейшие действия» далее в этом разделе приводятся сведения о том, как настроить этот код для производственной среды.
Как пометить вспомогательные сборки как необязательные
Выполните сборку проекта. Это позволяет создать вспомогательные сборки для всех языков и региональных параметров, для которых выполняется локализация.
Щелкните правой кнопкой мыши имя проекта в обозревателе решений и выберите Свойства.
Перейдите на вкладку Опубликовать и нажмите кнопку Файлы приложения.
Установите флажок Показать все файлы, чтобы отобразить вспомогательные сборки. По умолчанию все вспомогательные сборки будут включены в развертывание и будут видны в этом диалоговом окне.
В вспомогательной сборке будет указано имя в формате <isoCode>\ApplicationName.resources.dll, где <isoCode> является идентификатором языка в формате RFC 1766.
Щелкните Создать в списке Группа загрузки для каждого идентификатора языка. При появлении запроса имени группы загрузки введите идентификатор языка. Например, для японской вспомогательной сборки можно указать имя
ja-JP
группы загрузки.Закройте диалоговое окно Файлы приложения.
Загрузка вспомогательных сборок по требованию в C#
Откройте файл Program.cs. Если вы не видите этот файл в обозревателе решений, выберите проект и в меню Проект щелкните Показать все файлы.
Используйте следующий код для загрузки соответствующей вспомогательной сборки и запуска приложения.
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
В окне Свойства для приложения щелкните вкладку Приложение.
В нижней части вкладки нажмите кнопку Просмотреть события приложения.
Добавьте следующие импорты в начало файла ApplicationEvents.VB.
Imports System.Deployment.Application Imports System.Globalization Imports System.Threading
Добавьте в класс
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
. Программная установка этого значения — хороший способ проверить вспомогательные сборки перед развертыванием приложения.