Share via


逐步解說:依 ClickOnce 部署 API 的要求下載附屬組件

透過使用附屬組件,Windows Forms 應用程式可以設定為適用多個文化特性。 「附屬組件」 (Satellite Assembly) 為包含文化特性 (除了應用程式的預設文化特性以外) 之應用程式資源的組件。

當地語系化 ClickOnce 應用程式中所述,您可以在相同的 ClickOnce 部署中包含多個附屬組件,以因應多個文化特性。 儘管單一用戶可能只需要一個附屬組件,但 ClickOnce 預設會將您部署中所有的附屬組件下載到用戶端電腦。

本逐步解說示範如何標示您的附屬組件為選擇性,並僅下載用戶端電腦目前文化特性所需要的附屬組件。 下列程序使用 Windows 軟體開發套件 (SDK) 中可用的工具。 您也可以在 Visual Studio 中執行這項工作。 另請參閱逐步解說:使用設計工具依 ClickOnce 部署 API 的要求下載附屬組件,或逐步解說:使用設計工具依 ClickOnce 部署 API 的要求下載附屬組件

注意

.NET Core 和 .NET 5 和更新版本中不支援 System.Deployment.Application 命名空間中的 ApplicationDeployment 類別和 API。 .NET 7 支援存取應用程式部署屬性的新方法。 如需詳細資訊,請參閱在 .NET 中存取 ClickOnce 部署屬性。 .NET 7 不支援 ApplicationDeployment 方法的同等項。

注意

為了測試用途,下列程式碼範例以程式設計的方式設定文化特性為 ja-JP。 如需為生產環境調整程式碼的相關資訊,請參閱本主題<後續步驟>一節。

必要條件

本主題假設您知道如何使用 Visual Studio 將當地語系化的資源新增至您的應用程式。 如需詳細指示,請參閱逐步解說:當地語系化 Windows Forms

隨需下載附屬組件

  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 。 在部署您的應用程式之前,以程式設計方式設定這個值以測試附屬組件,是個好方法。