次の方法で共有


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

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

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

このチュートリアルでは、サテライト アセンブリをオプションのアセンブリとしてマークし、クライアント コンピューターの現在のカルチャ設定に合わせて必要なアセンブリだけをダウンロードする方法について説明します。

注意

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

必須コンポーネント

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

サテライト アセンブリをオプションのアセンブリとしてマークするには

  1. プロジェクトをビルドします。 これにより、ローカライズの対象となるすべてのカルチャについて、サテライト アセンブリが生成されます。

  2. ソリューション エクスプローラーでプロジェクト名を右クリックし、[プロパティ] をクリックします。

  3. [発行] タブをクリックし、[アプリケーション ファイル] をクリックします。

  4. [すべてのファイルを表示] チェック ボックスをオンにして、サテライト アセンブリを表示します。 既定では、すべてのサテライト アセンブリが配置対象に含められ、このダイアログ ボックスに表示されます。

    サテライト アセンブリの名前は、"isoCode\ApplicationName.resources.dll" という形式で付けられます。isoCode は RFC 1766 形式の言語識別子を表します。

  5. 各言語識別子の [ダウンロード グループ] ボックスの一覧で、[新規作成] をクリックします。 ダウンロード グループ名の入力を求めるメッセージが表示されたら、該当する言語識別子を入力します。 たとえば、日本語のサテライト アセンブリであれば、ダウンロード グループ名として「ja-JP」を指定します。

  6. [アプリケーション ファイル] ダイアログ ボックスを閉じます。

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

  1. Program.cs ファイルを開きます。 このファイルがソリューション エクスプローラーに表示されない場合は、プロジェクトを選択し、[プロジェクト] メニューの [すべてのファイルを表示] をクリックします。

  2. 該当するサテライト アセンブリをダウンロードし、アプリケーションを起動するには、次のコードを使用します。

    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 this error to the user, because a satellite
                            // assembly may not exist if the user's culture and the application's
                            // default culture match.
                        }
                    }
                }
            }
    
        }
    }
    

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

  1. アプリケーションの [プロパティ] ウィンドウで、[アプリケーション] タブをクリックします。

  2. タブ ページの一番下にある [アプリケーション イベントの表示] をクリックします。

  3. ApplicationEvents.VB ファイルの先頭に、次の Imports ステートメントを追加します。

    Imports System.Deployment.Application
    Imports System.Globalization
    Imports System.Threading
    
  4. MyApplication クラスに次のコードを追加します。

    Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
        Thread.CurrentThread.CurrentUICulture = New CultureInfo("ja-JP")
        GetSatelliteAssemblies(Thread.CurrentThread.CurrentUICulture.ToString())
    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 this error to the user, because a satellite
                    ' assembly may not exist if the user's culture and the application's
                    ' default culture match.
                End Try
            End If
        End If
    End Sub
    

次の手順

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

参照

処理手順

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

概念

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