Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.
Ett MissingManifestResourceException undantag utlöses av olika orsaker i .NET jämfört med UWP-appar.
.NET-appar
I .NET-appar genereras MissingManifestResourceException när försöket att hämta en resurs misslyckas eftersom resursuppsättningen för den neutrala kulturen inte kunde läsas in från en viss sammansättning. Även om undantaget utlöses när du försöker hämta en viss resurs orsakas det av att resursuppsättningen inte kunde läsas in i stället för att resursen inte kunde hittas.
Anmärkning
Mer information finns i avsnittet "Hantera ett MissingManifestResourceException-undantag" i avsnittet ResourceManager klass.
De främsta orsakerna till undantaget är följande:
Resursuppsättningen identifieras inte med dess fullständigt kvalificerade namn. Om parametern
baseNamei anropet till metoden ResourceManager.ResourceManager(String, Assembly) anger rotnamnet för resursuppsättningen utan namnområde, men resursuppsättningen tilldelas ett namnområde när den lagras i sammansättningen, utlöser anropet till metoden ResourceManager.GetString det här undantaget.Om du har bäddat in .resources-filen som innehåller standardkulturens resurser i den körbara filen och appen genererar en MissingManifestResourceExceptionkan du använda ett reflektionsverktyg som IL Disassembler (Ildasm.exe) för att fastställa resursens fullständigt kvalificerade namn. I ILDasm dubbelklickar du på den körbara manifestetiketten för att öppna fönstret MANIFEST. Resurser visas som
.mresource-poster och listas efter externa samlingsreferenser och anpassade attribut på samlingsnivå. Du kan också kompilera följande enkla verktyg, som visar de fullständigt kvalificerade namnen på inbäddade resurser i sammansättningen vars namn skickas till den som en kommandoradsparameter.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 ModuleDu identifierar resursen som angetts med dess resursfilnamn (tillsammans med dess valfria namnområde) och filnamnstillägget i stället för enbart dess namnområde och rotfilnamn. Det här undantaget utlöses till exempel om den neutrala kulturens resursuppsättning heter
GlobalResourcesoch du anger värdetGlobalResources.resources(i stället förGlobalResources) till parameternbaseNameför ResourceManager.ResourceManager(String, Assembly) konstruktorn.Det går inte att hitta den kulturspecifika resursuppsättning som identifieras i ett metodanrop och återställningsresursuppsättningen kan inte läsas in. Om du till exempel skapar satellitsammansättningar för de engelska (USA) och Ryssland (ryska) kulturerna, men du inte kan tillhandahålla en resursuppsättning för den neutrala kulturen, utlöses det här undantaget om appens aktuella kultur är engelska (Storbritannien).
MissingManifestResourceException använder HRESULT-COR_E_MISSINGMANIFESTRESOURCE, som har värdet 0x80131532.
MissingManifestResourceException använder standardimplementeringen Equals, som stöder referensjämlikhet.
För en lista över inledande egenskapsvärden för en instans av MissingManifestResourceException, se i MissingManifestResourceException-konstruktorn.
Anmärkning
Vi rekommenderar att du inkluderar en neutral uppsättning resurser i huvudsammansättningen, så att appen inte misslyckas om en satellituppsättning inte är tillgänglig.
UWP-appar (Universal Windows Platform)
UWP-appar distribuerar resurser för flera kulturer, inklusive den neutrala kulturen, i en enda paketresursindexfil (.pri). Om det inte går att hitta resurser för den föredragna kulturen i en UWP-app genereras därför MissingManifestResourceException under något av följande villkor:
- Appen innehåller inte en .pri-fil eller så gick det inte att öppna .pri-filen.
- Appens .pri-fil innehåller inte någon resursuppsättning för det angivna rotnamnet.