System.Resources.MissingManifestResourceException – třída
Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.
V MissingManifestResourceException .NET a aplikacích pro UPW se vyvolá výjimka z různých důvodů.
Aplikace .NET
V aplikacích .NET se vyvolá, když se pokus o načtení prostředku nezdaří, MissingManifestResourceException protože sadu prostředků pro neutrální jazykovou verzi nelze 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 ResourceManager tématu třídy.
Mezi hlavní příčiny výjimky patří:
Sada prostředků není identifikovaná plně kvalifikovaným názvem. Pokud například
baseName
parametr volání ResourceManager.ResourceManager(String, Assembly) metody určuje kořenový název sady prostředků bez oboru názvů, ale sada prostředků je přiřazena obor názvů, když je uložen v jeho sestavení, volání ResourceManager.GetString metody vyvolá tuto výjimku.Pokud jste do spustitelného souboru vloženého souboru .resources, který obsahuje výchozí prostředky jazykové verze, a aplikace vyvolá výjimku MissingManifestResourceException, můžete použít nástroj reflexe, jako je il Disassembler (Ildasm.exe), a určit tak plně kvalifikovaný název prostředku. V nástroji ILDasm poklikejte na popisek manifestu spustitelného souboru a otevřete okno MANIFESTu. Prostředky se zobrazují jako
.mresource
polož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("{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
Prostředek nastavený podle názvu souboru prostředku (spolu s jeho volitelným oborem názvů) a jeho příponou souboru, nikoli jeho oborem názvů a názvem kořenového souboru. Tato výjimka je vyvolána například v případě, že je sada prostředků neutrální jazykové verze pojmenována
GlobalResources
a zadáte hodnotuGlobalResources.resources
(místoGlobalResources
)baseName
parametru konstruktoru 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á HODNOTU HRESULT COR_E_MISSINGMANIFESTRESOURCE
, která má hodnotu 0x80131532.
MissingManifestResourceException používá výchozí Equals implementaci, která podporuje rovnost odkazů.
Seznam počátečních hodnot vlastností pro instanci MissingManifestResourceExceptionnaleznete v MissingManifestResourceException konstruktorech.
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í platforma Windows (UPW)
Aplikace pro UPW nasazují prostředky pro více jazykových verzí, včetně neutrální jazykové verze, 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 vyvolá se 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.