Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 platformy .NET
W aplikacjach platformy .NET MissingManifestResourceException jest zgłaszana, gdy próba pobrania zasobu nie powiedzie się, ponieważ zbioru zasobów dla kultury neutralnej nie można załadować z określonego zestawu. 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 zagadnieniu dotyczącym klasy ResourceManager.
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 parametr
baseName
w wywołaniu metody ResourceManager.ResourceManager(String, Assembly) 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 metody ResourceManager.GetString zgłasza ten wyjątek.Jeśli osadzono plik .resources zawierający zasoby kultury domyślnej w pliku wykonywalnym, a aplikacja zgłasza MissingManifestResourceException, możesz użyć narzędzia do refleksji, takiego jak dezasembler IL (IL Disassembler) (Ildasm.exe), w celu określenia w pełni kwalifikowanej nazwy zasobu. W ILDasm, kliknij dwukrotnie etykietę MANIFEST pliku wykonywalnego, aby otworzyć okno MANIFEST. Zasoby pojawiają się jako elementy
.mresource
i są wymienione po odwołaniach do zestawów zewnętrznych oraz niestandardowych atrybutach 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($"{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 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
) do parametrubaseName
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 angielskiej (Stany Zjednoczone) i rosyjskiej (Rosja), ale nie podasz zestawu zasobów dla neutralnej kultury, ten wyjątek jest zgłaszany, jeśli bieżącą kulturą aplikacji jest angielska (Wielka Brytania).
MissingManifestResourceException używa HRESULT COR_E_MISSINGMANIFESTRESOURCE
, który ma wartość 0x80131532.
MissingManifestResourceException używa domyślnej implementacji Equals, która obsługuje równość odwołań.
Aby uzyskać listę początkowych wartości właściwości dla wystąpienia MissingManifestResourceException, zapoznaj się z konstruktorami MissingManifestResourceException.
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 platformy uniwersalnej systemu Windows (UWP)
Aplikacje UWP umożliwiają zasoby dla wielu kultur, w tym neutralnej kultury, w jednym pliku indeksu zasobów pakietu (.pri). W związku z tym w aplikacji UWP (Uniwersalna platforma Windows), jeśli nie można odnaleźć zasobów preferowanej kultury, 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.