다음을 통해 공유


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 파일에는 지정된 루트 이름에 대한 리소스 집합이 포함되어 있지 않습니다.