연습: ClickOnce 배포 API에서 요청 시 위성 어셈블리 다운로드

업데이트: 2007년 11월

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

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

이 연습에서는 위성 어셈블리를 선택 항목으로 표시하고 클라이언트 컴퓨터의 현재 culture 설정에 따라 필요한 어셈블리만 다운로드하는 방법을 보여 줍니다. 다음 절차에서는 Windows SDK(소프트웨어 개발 키트)에 포함된 도구를 사용합니다. Visual Studio에서 이 작업을 수행할 수도 있습니다.

참고:

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

사전 요구 사항

이 항목에서는 사용자가 Microsoft Visual Studio 2005를 사용하여 응용 프로그램에 지역화된 리소스를 추가하는 방법을 알고 있다고 가정합니다. 자세한 내용은 연습: 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. Files 탭을 클릭합니다.

  5. 줄임표(...) 단추를 클릭하고 Resgen.exe를 사용하여 생성한 위성 어셈블리를 비롯하여 응용 프로그램의 어셈블리 및 파일이 모두 들어 있는 디렉터리를 선택합니다. 위성 어셈블리의 이름은 isoCode\ApplicationName.resources.dll 형식입니다. 여기서 isoCode는 RFC 1766 형식의 언어 식별자입니다.

  6. Populate를 클릭하여 배포에 파일을 추가합니다.

  7. 각 위성 어셈블리의 Optional 확인란을 선택합니다.

  8. 각 위성 어셈블리의 그룹 필드를 해당 ISO 언어 식별자로 설정합니다. 예를 들어, 일본어 위성 어셈블리의 경우 다운로드 그룹 이름 ja-JP를 지정합니다. 이렇게 하면 1단계에서 추가한 코드를 사용하여 사용자의 CurrentUICulture 속성 설정에 따라 적절한 위성 어셈블리를 다운로드할 수 있습니다.

다음 단계

프로덕션 환경에서는 클라이언트 컴퓨터에 기본적으로 올바른 값이 설정되어 있으므로 코드 예제에서 CurrentUICulture를 특정 값으로 설정하는 줄을 제거해야 할 수 있습니다. 예를 들어, 응용 프로그램이 일본어 클라이언트 컴퓨터에서 실행될 경우 CurrentUICulture는 기본적으로 ja-JP입니다. 이 값을 프로그래밍 방식으로 설정하면 응용 프로그램을 배포하기 전에 위성 어셈블리를 손쉽게 테스트할 수 있습니다.

참고 항목

개념

ClickOnce 배포 및 지역화