共用方式為


操作指南:使用 ClickOnce 部署 API 隨需求下載衛星組件

Windows Forms 應用程式可以透過使用衛星組件來設定多個文化特性。 附屬組件是包含非應用程式預設文化特性之應用程式資源的組件。

當地語系化 ClickOnce 應用程式中所述,您可以在相同的 ClickOnce 部署中包含多個語言文化的多個衛星組件。 根據預設,ClickOnce 會將部署中的所有附屬組件下載至用戶端電腦,不過單一用戶端可能只需要一個附屬組件。

本逐步解說示範如何將附屬組件標示為可選,以及僅下載用戶端電腦依其目前文化設定所需的組件。 下列程式會使用 Windows 軟體開發套件 (SDK) 中可用的工具。 您也可以在 Visual Studio 中執行此工作。 另請參閱 逐步解說:使用設計工具使用 ClickOnce 部署 API 隨選下載附屬組件逐步解說:使用設計工具使用 ClickOnce 部署 API 隨需下載附屬組件

備註

ApplicationDeployment命名空間中的System.Deployment.Application類別和 API 不支援 .NET Core 和 .NET 5 和更新版本。 在 .NET 7 中,支援存取應用程式部署屬性的新方法。 如需詳細資訊,請參閱 存取 .NET 中的 ClickOnce 部署屬性。 .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 以程式設計方式設定此值是在部署應用程式之前測試衛星組件的好方法。