System.Resources.MissingManifestResourceException-Klasse

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

Eine MissingManifestResourceException Ausnahme wird aus unterschiedlichen Gründen in .NET- und UWP-Apps ausgelöst.

.NET-Apps

In .NET-Apps wird ausgelöst, wenn der Versuch, eine Ressource abzurufen, fehlschlägt, MissingManifestResourceException da die für die neutrale Kultur festgelegte Ressource nicht aus einer bestimmten Assembly geladen werden konnte. Obwohl die Ausnahme ausgelöst wird, wenn Sie versuchen, eine bestimmte Ressource abzurufen, wird sie durch den Fehler beim Laden des Ressourcensatzes und nicht durch den Fehler beim Auffinden der Ressource verursacht.

Hinweis

Weitere Informationen finden Sie im Abschnitt "Handling a MissingManifestResourceException Exception" im ResourceManager Klassenthema.

Die Standard Ursachen der Ausnahme umfassen Folgendes:

  • Der Ressourcensatz wird nicht durch seinen vollqualifizierten Namen identifiziert. Wenn beispielsweise der baseName Parameter im Aufruf der ResourceManager.ResourceManager(String, Assembly) Methode den Stammnamen des Ressourcensatzes ohne Namespace angibt, dem Ressourcensatz jedoch ein Namespace zugewiesen wird, wenn er in der Assembly gespeichert ist, löst der Aufruf der ResourceManager.GetString Methode diese Ausnahme aus.

    Wenn Sie die Ressourcendatei ".resources", die die Ressourcen der Standardkultur enthält, in Ihre ausführbare Datei eingebettet haben und Die App ein MissingManifestResourceExceptionReflektionstool auslöst, können Sie ein Spiegelungstool wie il disassembler (Ildasm.exe) verwenden, um den vollqualifizierten Namen der Ressource zu ermitteln. Doppelklicken Sie in ILDasm auf die MANIFEST-Bezeichnung der ausführbaren Datei, um das MANIFEST-Fenster zu öffnen. Ressourcen werden als .mresource Elemente angezeigt und nach externen Assemblyverweisen und benutzerdefinierten Attributen auf Assemblyebene aufgelistet. Sie können auch das folgende einfache Hilfsprogramm kompilieren, das die vollqualifizierten Namen eingebetteter Ressourcen in der Assembly auflistet, deren Name als Befehlszeilenparameter an sie übergeben wird.

    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
    
  • Sie identifizieren die Ressource, die anhand des Ressourcendateinamens (zusammen mit dem optionalen Namespace) und der Dateierweiterung festgelegt wird, anstatt allein durch den Namespace und den Stammdateinamen. Diese Ausnahme wird beispielsweise ausgelöst, wenn der Ressourcensatz der neutralen Kultur benannt GlobalResources ist und Sie einen Wert von GlobalResources.resources (anstelle von GlobalResources) für den baseName Parameter des ResourceManager.ResourceManager(String, Assembly) Konstruktors angeben.

  • Der kulturspezifische Ressourcensatz, der in einem Methodenaufruf identifiziert wird, kann nicht gefunden werden, und der Fallbackressourcensatz kann nicht geladen werden. Wenn Sie z. B. Satellitenassemblys für die Kulturen Englisch (USA) und Russland (Russisch) erstellen, aber keine Ressourcen für die neutrale Kultur bereitstellen, wird diese Ausnahme ausgelöst, wenn die aktuelle Kultur Ihrer App Englisch (Vereinigtes Königreich) ist.

MissingManifestResourceException verwendet das HRESULT COR_E_MISSINGMANIFESTRESOURCE, das den Wert 0x80131532 hat.

MissingManifestResourceException verwendet die Equals-Standardimplementierung, die die Verweisgleichheit unterstützt.

Eine Liste der anfänglichen Eigenschaftswerte für eine Instanz von MissingManifestResourceException, finden Sie unter den MissingManifestResourceException Konstruktoren.

Hinweis

Es wird empfohlen, einen neutralen Satz von Ressourcen in Die Standard Assembly aufzunehmen, sodass ihre App nicht fehlschlägt, wenn eine Satellitenassembly nicht verfügbar ist.

Universelle Windows-Plattform-Apps (UWP)

UWP-Apps stellen Ressourcen für mehrere Kulturen bereit, einschließlich der neutralen Kultur, in einer einzelnen Paketressourcenindexdatei (PRI). Wenn Ressourcen für die bevorzugte Kultur in einer UWP-App nicht gefunden werden können, wird dies MissingManifestResourceException unter einer der folgenden Bedingungen ausgelöst:

  • Die App enthält keine PRI-Datei, oder die PRI-Datei konnte nicht geöffnet werden.
  • Die PRI-Datei der App enthält keinen Ressourcensatz für den angegebenen Stammnamen.