다음을 통해 공유


실습 가이드: 디자이너를 활용한 ClickOnce 배포 API로 요청 시 위성 어셈블리 다운로드

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

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

이 가이드는 위성 어셈블리를 선택적으로 설정하고 클라이언트 머신의 현재 지역 설정에 필요한 어셈블리만 다운로드하는 방법을 보여줍니다.

비고

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

비고

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

위성 어셈블리를 선택 사항으로 표시하려면

  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 코드 예제에서 줄을 제거해야 할 수 있습니다. 예를 들어 일본어 클라이언트 컴퓨터에서 애플리케이션이 실행될 때, 기본적으로 CurrentUICultureja-JP로 설정됩니다. 프로그래밍 방식으로 설정하는 것은 애플리케이션을 배포하기 전에 위성 어셈블리를 테스트하는 좋은 방법입니다.