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

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

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

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

참고

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

사전 요구 사항

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

요청 시 위성 어셈블리를 다운로드하려면

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

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

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

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

다음 단계

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

참고 항목

개념

ClickOnce 응용 프로그램 지역화