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

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

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

このチュートリアルでは、サテライト アセンブリをオプションとしてマークする方法の例、および現在のカルチャ設定にクライアント コンピューターが必要とするアセンブリのみをダウンロードする方法の例を示します。 次の手順では、Windows Software Development Kit (SDK) で入手できるツールを使用します。 このタスクは、Visual Studio で実行することもできます。 チュートリアル : デザイナを使用し、ClickOnce 配置 API で必要に応じてサテライト アセンブリをダウンロードする
チュートリアル : デザイナを使用し、ClickOnce 配置 API で必要に応じてサテライト アセンブリをダウンロードする
チュートリアル : デザイナーを使用し、ClickOnce 配置 API で必要に応じてサテライト アセンブリをダウンロードする
チュートリアル : デザイナーを使用し、ClickOnce 配置 API で必要に応じてサテライト アセンブリをダウンロードする

注意

テストのために、次のコード例でプログラムによってカルチャを ja-JP に設定します。このコードを運用環境用に調整する方法については、このトピックの「次の手順」セクションを参照してください。

必須コンポーネント

このトピックでは、ローカライズされたリソースを、Visual Studio を使用してアプリケーションに追加する方法を理解していること想定しています。 手順の詳細については、「チュートリアル : Windows フォームのローカリゼーション」を参照してください。

必要に応じてサテライト アセンブリをダウンロードするには

  1. 次のコードをアプリケーションに追加して、必要に応じたサテライト アセンブリのダウンロードを有効にします。

    Imports System.Deployment.Application
    Imports System.Globalization
    Imports System.Threading
    
    Public Class Form1
        Shared Sub Main(ByVal args As String())
            Application.EnableVisualStyles()
    
            Thread.CurrentThread.CurrentUICulture = New CultureInfo("ja-JP")
            GetSatelliteAssemblies(Thread.CurrentThread.CurrentUICulture.ToString())
    
            Application.Run(New Form1())
        End Sub 
    
        Private Shared Sub GetSatelliteAssemblies(ByVal groupName As String)
            If (ApplicationDeployment.IsNetworkDeployed) Then 
    
                Dim deploy As ApplicationDeployment = ApplicationDeployment.CurrentDeployment
    
                If (deploy.IsFirstRun) Then 
                    Try
                        deploy.DownloadFileGroup(groupName)
                    Catch de As DeploymentException
                        ' 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. 
    
                    End Try 
                End If 
            End If 
        End Sub 
    End Class
    
    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. [Files] タブをクリックします。

  5. Click the 省略記号ボタン ([...]) をクリックし、Resgen.exe を使用して生成したサテライト アセンブリを含む、アプリケーションのすべてのアセンブリとファイルを格納するディレクトリを選択します。 サテライト アセンブリの名前は、"isoCode\ApplicationName.resources.dll" という形式で付けられます。isoCode は RFC 1766 形式の言語識別子を表します。

  6. [Populate] をクリックして、配置にファイルを追加します。

  7. サテライト アセンブリごとに [Optional] チェック ボックスをオンにします。

  8. サテライト アセンブリごとに、グループ フィールドをその ISO 言語識別子に設定します。 たとえば、日本語のサテライト アセンブリの場合は、ja-JP というダウンロード グループ名を指定します。 これにより、手順 1. で追加したコードによって、ユーザーの CurrentUICulture プロパティ設定に応じて、適切なサテライト アセンブリをダウンロードできます。

次の手順

稼働環境では、既定でクライアント コンピューターに適切な値が設定されているため、CurrentUICulture を特定の値に設定するコード例の行を削除しなければならない可能性があります。 たとえば、アプリケーションを日本語のクライアント コンピューターで実行する場合、既定では CurrentUICulture が ja-JP になります。 この値をプログラムで設定する方法は、アプリケーションを配置する前にサテライト アセンブリをテストする場合に適しています。

参照

概念

ClickOnce アプリケーションのローカライズ