Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.
MissingManifestResourceException výjimka se vyvolá z různých příčin v .NET a UWP aplikacích.
Aplikace .NET
V aplikacích .NET se MissingManifestResourceException vyvolá, když se pokus o načtení prostředku nezdaří, protože sadu prostředků pro neutrální jazykovou verzi nebylo možné načíst z konkrétního sestavení. I když je výjimka vyvolána při pokusu o načtení konkrétního prostředku, příčinou je selhání načtení sady prostředků, nikoli selhání nalezení prostředku.
Poznámka:
Další informace najdete v části Zpracování výjimky MissingManifestResourceException v tématu třídy ResourceManager.
Mezi hlavní příčiny výjimky patří:
Sada prostředků není identifikovaná plně kvalifikovaným názvem. Pokud například parametr
baseNameve volání metody ResourceManager.ResourceManager(String, Assembly) určuje kořenový název sady prostředků bez oboru názvů, ale sadě prostředků je přiřazen obor názvů, když je uložena ve svém sestavení, volání metody ResourceManager.GetString vyvolá tuto výjimku.Pokud jste do svého spustitelného souboru vložili soubor .resources, který obsahuje prostředky výchozí kultury, můžete využít nástroj odrazu, jako je MissingManifestResourceException, k určení plně kvalifikovaného názvu prostředku, když aplikace vyvolá . V ILDasm poklikejte na popisek MANIFEST spustitelného souboru k otevření okna MANIFEST. Prostředky se zobrazují jako
.mresourcepoložky a jsou uvedeny za odkazy na externí sestavení a vlastní atributy na úrovni sestavení. Můžete také zkompilovat následující jednoduchý nástroj, který vypíše plně kvalifikované názvy vložených prostředků v sestavení, jehož název je předán jako parametr příkazového řádku.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 ModuleProstředek identifikujete podle názvu souboru prostředků (spolu s jeho případným oborem názvů) a jeho příponou souboru, nikoli pouze podle jeho oboru názvů a názvu kořenového souboru. Tato výjimka se například vyvolá, pokud je sada prostředků neutrální jazykové verze pojmenována
GlobalResourcesa zadáte hodnotuGlobalResources.resources(místoGlobalResources) parametrubaseNamekonstruktoru ResourceManager.ResourceManager(String, Assembly).Nelze najít sadu prostředků specifickou pro jazykovou verzi, která je identifikována voláním metody a nelze načíst záložní sadu prostředků. Pokud například vytváříte satelitní sestavení pro jazykové verze angličtiny (USA) a Ruska (ruština), ale nemůžete poskytnout sadu prostředků pro neutrální jazykovou verzi, vyvolá se tato výjimka, pokud je aktuální jazyková verze vaší aplikace angličtina (Spojené království).
MissingManifestResourceException používá COR_E_MISSINGMANIFESTRESOURCEHRESULT, který má hodnotu 0x80131532.
MissingManifestResourceException používá výchozí implementaci Equals, která podporuje rovnost odkazů.
Seznam počátečních hodnot vlastností pro instanci MissingManifestResourceExceptionnaleznete v konstruktoru MissingManifestResourceException.
Poznámka:
Doporučujeme do hlavního sestavení zahrnout neutrální sadu prostředků, takže pokud není k dispozici satelitní sestavení, nebude aplikace neúspěšná.
Aplikace pro Univerzální platformu Windows (UPW)
Aplikace pro UWP nasazují prostředky pro více kultur, včetně neutrální kultury, do jednoho souboru indexu prostředků balíčku (.pri). V aplikaci pro UPW se proto v případě, že se nepodařilo najít prostředky pro upřednostňovanou jazykovou verzi, MissingManifestResourceException se vyvolá za některé z následujících podmínek:
- Aplikace neobsahuje soubor .pri nebo soubor .pri nelze otevřít.
- Soubor .pri aplikace neobsahuje sadu prostředků pro daný kořenový název.