System.Resources.MissingManifestResourceException 클래스
이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.
MissingManifestResourceException.NET 및 UWP 앱에서 다른 이유로 예외가 throw됩니다.
.NET 앱
.NET 앱 MissingManifestResourceException 에서는 중립 문화권에 대한 리소스 집합을 특정 어셈블리에서 로드할 수 없기 때문에 리소스 검색 시도가 실패할 때 throw됩니다. 특정 리소스를 검색하려고 할 때 예외가 throw되지만 리소스를 찾지 못한 것이 아니라 리소스 집합을 로드하지 못하여 발생합니다.
참고 항목
자세한 내용은 클래스 항목의 "MissingManifestResourceException 예외 처리" 섹션을 ResourceManager 참조하세요.
예외의 기본 원인은 다음과 같습니다.
리소스 집합은 정규화된 이름으로 식별되지 않습니다. 예를 들어 메서드 호출 ResourceManager.ResourceManager(String, Assembly) 의 매개 변수가 네임스페이스가 없는 리소스 집합의 루트 이름을 지정하지만 리소스 집합이 어셈블리에 저장될 때 네임스페이스가 할당되는 경우
baseName
메서드에 대한 호출은 이 예외를 ResourceManager.GetString throw합니다.실행 파일에 기본 문화권의 리소스가 포함된 .resources 파일을 포함했고 앱이 throw하는 MissingManifestResourceException경우 IL 디스어셈블러(Ildasm.exe)와 같은 리플렉션 도구를 사용하여 리소스의 정규화된 이름을 확인할 수 있습니다. ILDasm에서 실행 파일의 매니페스트 레이블을 두 번 클릭하여 매니페스트 창을 엽니다. 리소스는 항목으로
.mresource
표시되며 외부 어셈블리 참조 및 사용자 지정 어셈블리 수준 특성 후에 나열됩니다. 명령줄 매개 변수로 이름이 전달되는 어셈블리에 포함된 리소스의 정규화된 이름을 나열하는 다음 간단한 유틸리티를 컴파일할 수도 있습니다.using System; using System.IO; using System.Reflection; public class Example0 { public static void Main() { if (Environment.GetCommandLineArgs().Length == 1) { Console.WriteLine("No filename."); return; } string filename = Environment.GetCommandLineArgs()[1].Trim(); // Check whether the file exists. if (! File.Exists(filename)) { Console.WriteLine("{0} does not exist.", filename); return; } // Try to load the assembly. Assembly assem = Assembly.LoadFrom(filename); Console.WriteLine("File: {0}", filename); // Enumerate the resource files. string[] resNames = assem.GetManifestResourceNames(); if (resNames.Length == 0) Console.WriteLine(" No resources found."); foreach (var resName in resNames) Console.WriteLine(" Resource: {0}", resName.Replace(".resources", "")); Console.WriteLine(); } }
Imports System.IO Imports System.Reflection Imports System.Resources Module Example3 Public Sub Main() If Environment.GetCommandLineArgs.Length = 1 Then Console.WriteLine("No filename.") Exit Sub End If Dim filename As String = Environment.GetCommandLineArgs(1).Trim() ' Check whether the file exists. If Not File.Exists(filename) Then Console.WriteLine("{0} does not exist.", filename) Exit Sub End If ' Try to load the assembly. Dim assem As Assembly = Assembly.LoadFrom(filename) Console.WriteLine("File: {0}", filename) ' Enumerate the resource files. Dim resNames() As String = assem.GetManifestResourceNames() If resNames.Length = 0 Then Console.WriteLine(" No resources found.") End If For Each resName In resNames Console.WriteLine(" Resource: {0}", resName.Replace(".resources", "")) Next Console.WriteLine() End Sub End Module
리소스 집합은 해당 네임스페이스 및 루트 파일 이름만 사용하는 것이 아니라 해당 리소스 파일 이름(선택적 네임스페이스와 함께)과 해당 파일 확장명을 사용하여 식별합니다. 예를 들어 중립 문화권의 리소스 집합 이름이 지정
GlobalResources
되고 생성자의 매개 변수에 값GlobalResources.resources
(대신GlobalResources
)을baseName
제공하는 경우 이 예외가 ResourceManager.ResourceManager(String, Assembly) throw됩니다.메서드 호출에서 식별된 문화권별 리소스 집합을 찾을 수 없으며 대체 리소스 집합을 로드할 수 없습니다. 예를 들어 영어(미국) 및 러시아(러시아어) 문화권에 대한 위성 어셈블리를 만들지만 중립 문화권에 대한 리소스 집합을 제공하지 못하는 경우 앱의 현재 문화권이 영어(영국)인 경우 이 예외가 throw됩니다.
MissingManifestResourceException 는 값이 0x80131532 HRESULT COR_E_MISSINGMANIFESTRESOURCE
를 사용합니다.
MissingManifestResourceException 는 참조 같음을 지원하는 기본 Equals 구현을 사용합니다.
인스턴스 MissingManifestResourceException의 초기 속성 값 목록은 생성자를 참조 MissingManifestResourceException 하세요.
참고 항목
위성 어셈블리를 사용할 수 없는 경우 앱이 실패하지 않도록 기본 어셈블리에 중립 리소스 집합을 포함하는 것이 좋습니다.
UWP(유니버설 Windows 플랫폼) 앱
UWP 앱은 중립 문화권을 포함한 여러 문화권에 대한 리소스를 단일 패키지 리소스 인덱스(.pri) 파일에 배포합니다. 따라서 UWP 앱에서 기본 문화권에 대한 리소스를 찾을 MissingManifestResourceException 수 없는 경우 다음 조건 중 하나에서 throw됩니다.
- 앱에 .pri 파일이 없거나 .pri 파일을 열 수 없습니다.
- 앱의 .pri 파일에는 지정된 루트 이름에 대한 리소스 집합이 포함되어 있지 않습니다.
.NET