次の方法で共有


チュートリアル: ClickOnce 配置 API を使用して必要に応じてサテライト アセンブリをダウンロードする

Windows フォーム アプリケーションは、サテライト アセンブリを使用して複数のカルチャ用に構成できます。 サテライト アセンブリは、アプリケーションの既定のカルチャ以外のカルチャのアプリケーション リソースを含むアセンブリです。

ClickOnce アプリケーションのローカライズで説明したように、同じ ClickOnce 配置内に複数のカルチャの複数のサテライト アセンブリを含めることができます。 既定では、ClickOnce は配置内のすべてのサテライト アセンブリをクライアント コンピューターにダウンロードしますが、1 つのクライアントでは必要なサテライト アセンブリが 1 つだけである可能性があります。

このチュートリアルでは、サテライト アセンブリを省略可能としてマークし、クライアント コンピューターが現在のカルチャ設定に必要なアセンブリのみをダウンロードする方法について説明します。 次の手順では、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 を指定します。 これにより、ユーザーの CurrentUICulture プロパティ設定に応じて、手順 1 で追加したコードで適切なサテライト アセンブリをダウンロードできるようになります。

次のステップ

運用環境では、クライアント コンピューターに既定で正しい値が設定されるため、 CurrentUICulture を特定の値に設定するコード例の行を削除する必要があります。 たとえば、アプリケーションが日本語のクライアント コンピューターで実行されている場合、 CurrentUICulture は既定で ja-JP されます。 この値をプログラムで設定すると、アプリケーションをデプロイする前にサテライト アセンブリをテストするのに適しています。