Udostępnij za pośrednictwem


System.Resources.MissingManifestResourceException, klasa

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

Wyjątek MissingManifestResourceException jest zgłaszany z różnych powodów w aplikacjach platformy .NET i platformy UWP.

Aplikacje .NET

W aplikacjach .NET jest zgłaszany, gdy próba pobrania zasobu nie powiedzie się, MissingManifestResourceException ponieważ nie można załadować zestawu zasobów dla kultury neutralnej. Chociaż wyjątek jest zgłaszany podczas próby pobrania określonego zasobu, jest spowodowany niepowodzeniem załadowania zestawu zasobów, a nie niepowodzeniem znalezienia zasobu.

Uwaga

Aby uzyskać dodatkowe informacje, zobacz sekcję "Obsługa wyjątku MissingManifestResourceException" w temacie ResourceManager klasy.

Główne przyczyny wyjątku obejmują następujące elementy:

  • Zestaw zasobów nie jest identyfikowany przez jego w pełni kwalifikowaną nazwę. Jeśli na przykład baseName parametr w wywołaniu ResourceManager.ResourceManager(String, Assembly) metody określa nazwę główną zestawu zasobów bez przestrzeni nazw, ale zestaw zasobów jest przypisany do przestrzeni nazw, gdy jest przechowywany w zestawie, wywołanie ResourceManager.GetString metody zgłasza ten wyjątek.

    Jeśli osadzono plik resources zawierający zasoby kultury domyślnej w pliku wykonywalnym, a aplikacja zgłasza MissingManifestResourceExceptionwyjątek , możesz użyć narzędzia odbicia, takiego jak dezasembler IL (Ildasm.exe), aby określić w pełni kwalifikowaną nazwę zasobu. W pliku ILDasm kliknij dwukrotnie etykietę MANIFEST pliku wykonywalnego, aby otworzyć okno MANIFEST. Zasoby są wyświetlane jako .mresource elementy i są wyświetlane po odwołaniach do zestawów zewnętrznych i atrybutach niestandardowego poziomu zestawu. Można również skompilować następujące proste narzędzie, które wyświetla w pełni kwalifikowane nazwy zasobów osadzonych w zestawie, którego nazwa jest przekazywana do niego jako parametr wiersza polecenia.

    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
    
  • Można zidentyfikować zestaw zasobów według nazwy pliku zasobu (wraz z opcjonalną przestrzenią nazw) i jego rozszerzeniem pliku, a nie przez samą przestrzeń nazw i nazwę pliku głównego. Na przykład ten wyjątek jest zgłaszany, jeśli zestaw zasobów neutralnej kultury ma nazwę GlobalResources i podajesz wartość GlobalResources.resources (zamiast GlobalResources) do baseName parametru konstruktora ResourceManager.ResourceManager(String, Assembly) .

  • Nie można odnaleźć zestawu zasobów specyficznych dla kultury zidentyfikowanego w wywołaniu metody i nie można załadować zestawu zasobów rezerwowych. Jeśli na przykład utworzysz zestawy satelitarne dla kultur angielskich (Stany Zjednoczone) i Rosji (rosyjski), ale nie podasz zestawu zasobów dla kultury neutralnej, ten wyjątek zostanie zgłoszony, jeśli bieżąca kultura aplikacji jest angielska (Wielka Brytania).

MissingManifestResourceException używa wartości HRESULT COR_E_MISSINGMANIFESTRESOURCE, która ma wartość 0x80131532.

MissingManifestResourceException używa domyślnej Equals implementacji, która obsługuje równość odwołań.

Aby uzyskać listę początkowych wartości właściwości dla wystąpienia MissingManifestResourceExceptionprogramu , zobacz MissingManifestResourceException konstruktory.

Uwaga

Zalecamy uwzględnienie neutralnego zestawu zasobów w zestawie głównym, więc aplikacja nie powiedzie się, jeśli zestaw satelitarny jest niedostępny.

aplikacje platforma uniwersalna systemu Windows (UWP)

Aplikacje platformy UNIWERSALNEJ systemu Windows wdrażają zasoby dla wielu kultur, w tym neutralną kulturę, w jednym pliku indeksu zasobów pakietu (pri). W związku z tym w aplikacji platformy UWP, jeśli nie można odnaleźć zasobów preferowanej kultury, element MissingManifestResourceException jest zgłaszany w jednym z następujących warunków:

  • Aplikacja nie zawiera pliku pri lub nie można otworzyć pliku pri.
  • Plik pri aplikacji nie zawiera zestawu zasobów dla danej nazwy głównej.