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

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

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

Это пошаговое руководство показывает, как пометить вспомогательные сборки как необязательные и загрузить только сборку, необходимую клиентскому компьютеру для текущих настроек языка и региональных параметров. В следующей процедуре используются средства, доступные в пакете СРЕДСТВ разработки программного обеспечения Windows (SDK). Эту задачу также можно выполнить в Visual Studio. См. также пошаговое руководство. Скачивание вспомогательных сборок по запросу с помощью API развертывания ClickOnce с помощью конструктора или пошагового руководства. Скачивание вспомогательных сборок по запросу с помощью API развертывания ClickOnce с помощью конструктора.

Примечание.

Класс ApplicationDeployment и API в System.Deployment.Application пространстве имен не поддерживаются в .NET Core и .NET 5 и более поздних версиях. В .NET 7 поддерживается новый метод доступа к свойствам развертывания приложения. Дополнительные сведения см. в разделе "Свойства развертывания Access ClickOnce" в .NET. .NET 7 не поддерживает эквивалент методов ApplicationDeployment.

Примечание.

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

Необходимые компоненты

Составители этого раздела исходили из того, что вы знаете, как добавить локализованные ресурсы в свое приложение с использованием Visual Studio. Подробные инструкции см. в пошаговом руководстве по локализации Форм Windows.

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

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

    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.
                        }
                    }
                }
            }
    
        }
    }
    
  2. Создайте вспомогательные сборки для приложения с помощью Resgen.exe (генератор файлов ресурсов) или Visual Studio.

  3. Создайте манифест приложения или откройте существующий манифест приложения с помощью MageUI.exe. Дополнительные сведения об этом инструменте см. в разделе MageUI.exe (Инструмент создания и изменения манифестов, графический клиент).

  4. Щелкните вкладку Файлы .

  5. Щелкните кнопку многоточие (...) и выберите каталог, содержащий все сборки и файлы вашего приложения, включая вспомогательные сборки, созданные с помощью инструмента Resgen.exe. (В вспомогательной сборке будет указано имя в форме <isoCode\ApplicationName.resources.dll, где <isoCode>> является идентификатором языка в формате RFC 1766.)

  6. Щелкните Заполнить , чтобы добавить файлы в ваше развертывание.

  7. Установите флажок Необязательно для каждой вспомогательной сборки.

  8. Установите в поле группировки для каждой вспомогательной сборки соответствующий идентификатор языка по ISO. Например, для японской вспомогательной сборки нужно указать имя группы загрузки ja-JP. В результате код, добавленный вами в шаге 1, сможет загружать соответствующую вспомогательную сборку в зависимости от настройки свойства CurrentUICulture у пользователя.

Следующие шаги

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