System.Resources.MissingManifestResourceException, klasa
Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.
Wyjątek MissingManifestResourceException jest zgłaszany z różnych powodów w aplikacjach platformy .NET i platformy UWP.
Aplikacje .NET
W aplikacjach .NET jest zgłaszany, gdy próba pobrania zasobu nie powiedzie się, MissingManifestResourceException ponieważ nie można załadować zestawu zasobów dla kultury neutralnej. Chociaż wyjątek jest zgłaszany podczas próby pobrania określonego zasobu, jest spowodowany niepowodzeniem załadowania zestawu zasobów, a nie niepowodzeniem znalezienia zasobu.
Uwaga
Aby uzyskać dodatkowe informacje, zobacz sekcję "Obsługa wyjątku MissingManifestResourceException" w temacie ResourceManager klasy.
Główne przyczyny wyjątku obejmują następujące elementy:
Zestaw zasobów nie jest identyfikowany przez jego w pełni kwalifikowaną nazwę. Jeśli na przykład
baseName
parametr w wywołaniu ResourceManager.ResourceManager(String, Assembly) metody określa nazwę główną zestawu zasobów bez przestrzeni nazw, ale zestaw zasobów jest przypisany do przestrzeni nazw, gdy jest przechowywany w zestawie, wywołanie ResourceManager.GetString metody zgłasza ten wyjątek.Jeśli osadzono plik resources zawierający zasoby kultury domyślnej w pliku wykonywalnym, a aplikacja zgłasza MissingManifestResourceExceptionwyjątek , możesz użyć narzędzia odbicia, takiego jak dezasembler IL (Ildasm.exe), aby określić w pełni kwalifikowaną nazwę zasobu. W pliku ILDasm kliknij dwukrotnie etykietę MANIFEST pliku wykonywalnego, aby otworzyć okno MANIFEST. Zasoby są wyświetlane jako
.mresource
elementy i są wyświetlane po odwołaniach do zestawów zewnętrznych i atrybutach niestandardowego poziomu zestawu. Można również skompilować następujące proste narzędzie, które wyświetla w pełni kwalifikowane nazwy zasobów osadzonych w zestawie, którego nazwa jest przekazywana do niego jako parametr wiersza polecenia.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
Można zidentyfikować zestaw zasobów według nazwy pliku zasobu (wraz z opcjonalną przestrzenią nazw) i jego rozszerzeniem pliku, a nie przez samą przestrzeń nazw i nazwę pliku głównego. Na przykład ten wyjątek jest zgłaszany, jeśli zestaw zasobów neutralnej kultury ma nazwę
GlobalResources
i podajesz wartośćGlobalResources.resources
(zamiastGlobalResources
) dobaseName
parametru konstruktora ResourceManager.ResourceManager(String, Assembly) .Nie można odnaleźć zestawu zasobów specyficznych dla kultury zidentyfikowanego w wywołaniu metody i nie można załadować zestawu zasobów rezerwowych. Jeśli na przykład utworzysz zestawy satelitarne dla kultur angielskich (Stany Zjednoczone) i Rosji (rosyjski), ale nie podasz zestawu zasobów dla kultury neutralnej, ten wyjątek zostanie zgłoszony, jeśli bieżąca kultura aplikacji jest angielska (Wielka Brytania).
MissingManifestResourceException używa wartości HRESULT COR_E_MISSINGMANIFESTRESOURCE
, która ma wartość 0x80131532.
MissingManifestResourceException używa domyślnej Equals implementacji, która obsługuje równość odwołań.
Aby uzyskać listę początkowych wartości właściwości dla wystąpienia MissingManifestResourceExceptionprogramu , zobacz MissingManifestResourceException konstruktory.
Uwaga
Zalecamy uwzględnienie neutralnego zestawu zasobów w zestawie głównym, więc aplikacja nie powiedzie się, jeśli zestaw satelitarny jest niedostępny.
aplikacje platforma uniwersalna systemu Windows (UWP)
Aplikacje platformy UNIWERSALNEJ systemu Windows wdrażają zasoby dla wielu kultur, w tym neutralną kulturę, w jednym pliku indeksu zasobów pakietu (pri). W związku z tym w aplikacji platformy UWP, jeśli nie można odnaleźć zasobów preferowanej kultury, element MissingManifestResourceException jest zgłaszany w jednym z następujących warunków:
- Aplikacja nie zawiera pliku pri lub nie można otworzyć pliku pri.
- Plik pri aplikacji nie zawiera zestawu zasobów dla danej nazwy głównej.