다음을 통해 공유


.NET 앱의 리소스

거의 모든 프로덕션 품질 앱은 리소스를 사용해야 합니다. 리소스는 앱과 함께 논리적으로 배포되는 실행 불가능한 데이터입니다. 리소스가 앱에 오류 메시지 또는 사용자 인터페이스의 일부로 표시될 수 있습니다. 리소스는 문자열, 이미지 및 지속형 개체를 비롯한 다양한 형식의 데이터를 포함할 수 있습니다. (지속형 개체를 리소스 파일에 쓰려면 개체를 직렬화할 수 있어야 합니다.) 리소스 파일에 데이터를 저장하면 전체 앱을 다시 컴파일하지 않고도 데이터를 변경할 수 있습니다. 또한 단일 위치에 데이터를 저장할 수 있으며 여러 위치에 저장된 하드 코딩된 데이터에 의존할 필요가 없습니다.

.NET은 리소스 만들기 및 지역화를 포괄적으로 지원합니다. 또한 .NET은 지역화된 리소스를 패키징하고 배포하기 위한 간단한 모델을 지원합니다.

리소스 만들기 및 지역화

지역화되지 않은 앱에서는 특히 소스 코드의 여러 위치에서 하드 코딩될 수 있는 문자열의 경우 리소스 파일을 앱 데이터의 리포지토리로 사용할 수 있습니다. 가장 일반적으로 리소스를 텍스트(.txt) 또는 XML(.resx) 파일로 만들고 Resgen.exe(리소스 파일 생성기) 를 사용하여 이진 .resources 파일로 컴파일합니다. 그런 다음, 언어 컴파일러에서 이러한 파일을 앱의 실행 파일에 포함할 수 있습니다. 리소스를 만드는 방법에 대한 자세한 내용은 리소스 파일 만들기를 참조하세요.

특정 문화권에 대한 앱의 리소스를 지역화할 수도 있습니다. 이렇게 하면 지역화된(번역된) 버전의 앱을 빌드할 수 있습니다. 지역화된 리소스를 사용하는 앱을 개발할 때 적절한 리소스를 사용할 수 없는 경우 리소스가 사용되는 중립 또는 대체 문화권 역할을 하는 문화권을 지정합니다. 일반적으로 중립 문화권의 리소스는 앱의 실행 파일에 저장됩니다. 개별 지역화된 문화권에 대한 나머지 리소스는 독립 실행형 위성 어셈블리에 저장됩니다. 자세한 내용은 위성 어셈블리 만들기를 참조하세요.

리소스 패키징 및 배포

위성 어셈블리에 지역화된 앱 리소스를 배포합니다. 위성 어셈블리에는 단일 문화권의 리소스가 포함됩니다. 앱 코드가 포함되어 있지 않습니다. 위성 어셈블리 배포 모델에서는 앱이 지원하는 각 문화권에 대해 하나의 기본 어셈블리(일반적으로 주 어셈블리)와 하나의 위성 어셈블리를 사용하여 앱을 만듭니다. 위성 어셈블리는 주 어셈블리의 일부가 아니므로 앱의 주 어셈블리를 대체하지 않고 특정 문화권에 해당하는 리소스를 쉽게 바꾸거나 업데이트할 수 있습니다.

앱의 기본 리소스 어셈블리를 구성할 리소스를 신중하게 결정합니다. 주 어셈블리의 일부이므로 주 어셈블리를 변경하려면 주 어셈블리를 바꿔야 합니다. 기본 리소스를 제공하지 않으면, 리소스 대체 프로세스가 해당 리소스를 발견하려고 시도할 때 예외가 발생합니다. 잘 설계된 앱에서는 리소스를 사용할 때 예외가 발생해서는 안 됩니다.

자세한 내용은 리소스 패키징 및 배포 문서를 참조하세요.

리소스 검색

런타임에 앱은 속성에 지정된 문화권에 따라 스레드별로 적절한 지역화된 리소스를 CultureInfo.CurrentUICulture 로드합니다. 이 속성 값은 다음과 같이 파생됩니다.

  • 지역화된 문화권을 나타내는 개체를 속성에 직접 할당합니다 CultureInfoThread.CurrentUICulture .

  • 문화권이 명시적으로 할당되지 않은 경우 속성에서 CultureInfo.DefaultThreadCurrentUICulture 기본 스레드 UI 문화권을 검색합니다.

  • 기본 스레드 UI 문화권이 명시적으로 할당되지 않은 경우 로컬 컴퓨터에서 현재 사용자의 문화권을 검색합니다. Windows에서 실행되는 .NET 구현은 Windows GetUserDefaultUILanguage 함수를 호출하여 이 작업을 수행합니다.

현재 UI 문화권이 설정되는 방법에 대한 자세한 내용은 CultureInfoCultureInfo.CurrentUICulture 참조 페이지를 확인하세요.

그 후 System.Resources.ResourceManager 클래스를 사용하여 현재 UI 문화권 또는 특정 문화권에 대한 리소스를 검색할 수 있습니다. 클래스는 ResourceManager 리소스 검색에 가장 일반적으로 사용되지만 네 System.Resources 임스페이스에는 리소스를 검색하는 데 사용할 수 있는 추가 형식이 포함됩니다. 여기에는 다음이 포함됩니다.

  • ResourceReader 어셈블리에 포함되거나 독립 실행형 이진 .resources 파일에 저장된 리소스를 열거할 수 있는 클래스입니다. 런타임에 사용할 수 있는 리소스의 정확한 이름을 모를 때 유용합니다.

  • ResXResourceReader XML(.resx) 파일에서 리소스를 검색할 수 있는 클래스입니다.

  • 대체 ResourceSet 규칙을 관찰하지 않고 특정 문화권의 리소스를 검색할 수 있는 클래스입니다. 리소스는 어셈블리 또는 독립 실행형 이진 .resources 파일에 저장할 수 있습니다. 다른 원본에서 리소스를 검색하기 위해 IResourceReader 클래스를 사용할 수 있도록 하는 ResourceSet 구현을 개발할 수도 있습니다.

  • ResXResourceSet XML 리소스 파일의 모든 항목을 메모리로 검색할 수 있는 클래스입니다.

참고하십시오