可以使用卫星程序集为多个区域性配置 Windows 窗体应用程序。 卫星程序集是一个程序集,其中包含非应用程序默认区域性文化的应用程序资源。
如 本地化 ClickOnce 应用程序中所述,您可以在同一个 ClickOnce 部署中包含多个用于不同文化的附属程序集。 默认情况下,ClickOnce 会将部署中的所有附属程序集下载到客户端计算机,尽管单个客户端可能只需要一个附属程序集。
本演练演示如何将附属程序集标记为可选,并仅下载客户端计算机对其当前区域性设置所需的程序集。 以下过程使用 Windows 软件开发工具包(SDK)中提供的工具。 也可以在 Visual Studio 中执行此任务。 另请参阅演练:使用设计器通过 ClickOnce 部署 API 按需下载附属程序集或演练:使用设计器通过 ClickOnce 部署 API 按需下载附属程序集。
注释
ApplicationDeployment 类和System.Deployment.Application 命名空间中的 API 在 .NET Core 和 .NET 5 及更高版本中不受支持。 在 .NET 7 中,支持访问应用程序部署属性的新方法。 有关详细信息,请参阅 .NET 中的 Access ClickOnce 部署属性。 .NET 7 不支持 ApplicationDeployment 方法的等效项。
注释
出于测试目的,下面的代码示例通过编程自动将区域性设置为 ja-JP。 有关如何为生产环境调整此代码的信息,请参阅本主题后面的“后续步骤”部分。
先决条件
本主题假定你知道如何使用 Visual Studio 将本地化资源添加到应用程序。 有关详细说明,请参阅 演练:本地化 Windows 窗体。
按需下载卫星组件
将以下代码添加到您的应用程序中,以启用按需下载附属程序集功能。
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>\ApplicationName.resources.dll,其中 <isoCode> 是 RFC 1766 格式的语言标识符。
单击添加,将文件添加到部署。
为每个附属程序集选中“可选”复选框。
将每个附属程序集的组字段设置为其 ISO 语言标识符。 例如,对于日本卫星组件,您可以指定下载组名称
ja-JP。 这将允许在步骤 1 中添加的代码下载适当的卫星程序集,具体取决于用户 CurrentUICulture 属性设置。
后续步骤
在生产环境中,您可能需要删除代码示例中将 CurrentUICulture 设置为特定值的那一行,因为客户端计算机会默认设置为正确的值。 例如,当您的应用程序在日语客户端计算机上运行时,CurrentUICulture 默认将为 ja-JP。 以编程方式设置此值是部署应用程序之前测试卫星程序集的好方法。