Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
baseNameParameter 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
.mresourceElemente 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 ModuleSie 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
GlobalResourcesist und Sie einen Wert vonGlobalResources.resources(anstelle vonGlobalResources) für denbaseNameParameter 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.