연습: 디자이너를 사용하여 ClickOnce 배포 API에서 요청 시 위성 어셈블리 다운로드
위성 어셈블리를 사용하면 Windows Forms 애플리케이션을 여러 문화권에 맞게 구성할 수 있습니다. 위성 어셈블리 는 애플리케이션의 기본 문화권 이외의 문화권을 위한 애플리케이션 리소스가 포함된 어셈블리입니다.
ClickOnce 애플리케이션 지역화에서 설명한 대로 동일한 ClickOnce 배포 내에 여러 문화권을 위한 여러 위성 어셈블리를 포함할 수 있습니다. 기본적으로 ClickOnce에서는 단일 클라이언트에 하나의 위성 어셈블리만 필요한 경우라도 배포의 모든 위성 어셈블리를 클라이언트 컴퓨터에 다운로드합니다.
이 연습에서는 위성 어셈블리를 선택적 항목으로 표시하고 클라이언트 컴퓨터의 현재 문화권 설정에 필요한 어셈블리만 다운로드하는 방법을 설명합니다.
참고
System.Deployment.Application 네임스페이스의 ApplicationDeployment 클래스 및 API는 .NET Core 및 .NET 5 이상 버전에서 지원되지 않습니다. .NET 7에서 애플리케이션 배포 속성에 액세스하는 새로운 방법을 지원합니다. 자세한 내용은 .NET에서 ClickOnce 배포 속성 액세스를 참조하세요. .NET 7은 ApplicationDeployment 메서드와 동등한 메서드를 지원하지 않습니다.
참고 항목
테스트를 위해 다음 코드 예제에서는 프로그래밍 방식으로 문화권을 ja-JP
로 설정합니다. 이 코드를 프로덕션 환경에 맞게 조정하는 방법에 대한 자세한 내용은 이 항목의 뒷부분에 나오는 "다음 단계" 섹션을 참조하세요.
위성 어셈블리를 선택 항목으로 표시하려면
프로젝트를 빌드합니다. 이렇게 하면 지역화할 모든 문화권에 대한 위성 어셈블리가 생성됩니다.
솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 속성을 클릭합니다.
게시 탭을 클릭하고 애플리케이션 파일을 클릭합니다.
모든 파일 표시 확인란을 선택하여 위성 어셈블리를 표시합니다. 기본적으로 모든 위성 어셈블리는 배포에 포함되고 이 대화 상자에 표시됩니다.
(위성 어셈블리의 이름은 <isoCode>\ApplicationName.resources.dll 형식입니다. 여기서 <isoCode>는 RFC 1766 형식의 언어 식별자입니다.)
각 언어 식별자에 대해 다운로드 그룹 목록에서 새로 만들기를 클릭합니다. 다운로드 그룹 이름을 요청하는 메시지가 표시되면 언어 식별자를 입력합니다. 예를 들어 일본어 위성 어셈블리의 경우 다운로드 그룹 이름
ja-JP
를 지정합니다.애플리케이션 파일 대화 상자를 닫습니다.
C#에서 요청 시 위성 어셈블리를 다운로드하려면
Program.cs 파일을 엽니다. 솔루션 탐색기에서 이 파일을 표시하지 않으려면 프로젝트를 선택하고 프로젝트 메뉴에서 모든 파일 표시를 클릭합니다.
다음 코드를 사용하여 해당하는 위성 어셈블리를 다운로드하고 애플리케이션을 시작합니다.
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에서 요청 시 위성 어셈블리를 다운로드하려면
애플리케이션에 대한 속성 창에서 애플리케이션 탭을 클릭합니다.
탭 페이지 아래쪽에서 애플리케이션 이벤트 보기클릭합니다.
ApplicationEvents.VB 파일의 시작 부분에 다음 가져오기를 추가합니다.
Imports System.Deployment.Application Imports System.Globalization Imports System.Threading
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
입니다. 애플리케이션을 배포하기 전에 이 값을 프로그래밍 방식으로 설정하면 위성 어셈블리를 쉽게 테스트할 수 있습니다.