다음을 통해 공유


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

위성 어셈블리를 사용하면 Windows Forms 애플리케이션을 여러 문화권에 맞게 구성할 수 있습니다. 위성 어셈블리 는 애플리케이션의 기본 문화권 이외의 문화권을 위한 애플리케이션 리소스가 포함된 어셈블리입니다.

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

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

참고

System.Deployment.Application 네임스페이스의 ApplicationDeployment 클래스 및 API는 .NET Core 및 .NET 5 이상 버전에서 지원되지 않습니다. .NET 7에서 애플리케이션 배포 속성에 액세스하는 새로운 방법을 지원합니다. 자세한 내용은 .NET에서 ClickOnce 배포 속성 액세스를 참조하세요. .NET 7은 ApplicationDeployment 메서드와 동등한 메서드를 지원하지 않습니다.

참고 항목

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

사전 요구 사항

이 항목에서는 사용자가 Visual Studio를 사용하여 애플리케이션에 지역화된 리소스를 추가하는 방법을 알고 있다고 가정합니다. 자세한 내용은 연습: 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. 파일 탭을 클릭합니다.

  5. 줄임표 단추(...)를 클릭하고 Resgen.exe를 사용하여 생성한 위성 어셈블리를 비롯한 애플리케이션의 모든 어셈블리와 파일이 포함된 디렉터리를 선택합니다. (위성 어셈블리의 이름은 <isoCode>\ApplicationName.resources.dll 형식입니다. 여기에서 <isoCode>는 RFC 1766 형식의 언어 식별자입니다.)

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

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

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

다음 단계

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