연습: 디자이너를 사용하여 ClickOnce 배포 API에서 요청 시 위성 어셈블리 다운로드

위성 어셈블리를 사용하면 Windows Forms 응용 프로그램을 여러 문화권에 맞게 구성할 수 있습니다. 위성 어셈블리는 응용 프로그램 기본 culture 이외의 culture를 위한 응용 프로그램 리소스가 들어 있는 어셈블리입니다.

ClickOnce 응용 프로그램 지역화에서 설명한 대로 동일한 ClickOnce 배포 내에 여러 문화권을 위한 여러 개의 위성 어셈블리를 포함할 수 있습니다. 기본적으로 ClickOnce에서는 한 클라이언트에서 하나의 위성 어셈블리만 필요한 경우라도 배포에 포함된 모든 위성 어셈블리가 클라이언트 컴퓨터에 다운로드됩니다.

이 연습에서는 위성 어셈블리를 선택적인 것으로 표시하고 클라이언트 컴퓨터의 현재 문화권 설정에 따라 필요한 어셈블리만 다운로드하는 방법을 보여 줍니다.

참고

테스트를 위해 다음 코드 예제에서는 프로그래밍 방식으로 문화권을 ja-JP로 설정합니다. 이 코드를 프로덕션 환경에 맞게 조정하는 방법에 대한 자세한 내용은 이 항목의 뒷부분에 나오는 "다음 단계" 단원을 참조하십시오.

사전 요구 사항

이 항목에서는 사용자가 Visual Studio를 사용하여 응용 프로그램에 지역화된 리소스를 추가하는 방법을 알고 있다고 가정합니다. 자세한 내용은 연습: Windows Forms 지역화를 참조하십시오.

위성 어셈블리를 선택적인 것으로 표시하려면

  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 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 응용 프로그램 지역화