Freigeben über


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-Anwendungen

In .NET Apps wird MissingManifestResourceException ausgelöst, wenn der Versuch, eine Ressource abzurufen, fehlschlägt, weil das Ressourcen Set für das neutrale Gebietsschema 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 "Umgang mit einer MissingManifestResourceException-Ausnahme" im Thema der ResourceManager-Klasse.

Die Hauptursachen der Ausnahme sind:

  • Das Ressourcenset wird nicht durch seinen voll qualifizierten 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 .resources-Datei, die die Ressourcen des Standard-Gebietsschemas enthält, in Ihre ausführbare Datei eingebettet haben und Ihre App ein MissingManifestResourceException auslöst, können Sie ein Reflection Tool wie z. B. den 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($"{filename} does not exist.");
             return;
          }   
          
          // Try to load the assembly.
          Assembly assem = Assembly.LoadFrom(filename);
          Console.WriteLine($"File: {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: {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 den Ressourcensatz über seinen Ressourcendateinamen (zusammen mit dem optionalen Namespace) und die Dateierweiterung, 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 beispielsweise 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 Standardimplementierung Equals , die die Referenzgleichheit unterstützt.

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

Hinweis

Es wird empfohlen, eine neutrale Gruppe von Ressourcen in die Hauptassembly aufzunehmen, sodass ihre App nicht fehlschlägt, wenn eine Satellitenassembly nicht verfügbar ist.

Apps für die universelle Windows-Plattform (UWP)

UWP-Apps stellen Ressourcen für mehrere Kulturen bereit, einschließlich der neutralen Kultur, in einer einzelnen Paketressourcenindexdatei (PRI). Daher wird in einer UWP-App, wenn Ressourcen für die bevorzugte Kultur nicht gefunden werden können, 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.