Класс System.Resources.MissingManifestResourceException
В этой статье приводятся дополнительные замечания к справочной документации по этому API.
MissingManifestResourceException Исключение создается по разным причинам в приложениях .NET и UWP.
Приложения .NET
В приложениях .NET возникает ошибка при попытке получить ресурс, MissingManifestResourceException так как не удалось загрузить набор ресурсов для нейтрального языка и региональных параметров из определенной сборки. Хотя исключение возникает при попытке получить определенный ресурс, это вызвано сбоем загрузки набора ресурсов, а не сбоем поиска ресурса.
Примечание.
Дополнительные сведения см. в разделе "Обработка исключения MissingManifestResourceException" в ResourceManager разделе класса.
Основными причинами исключения являются следующие:
Набор ресурсов не определяется его полным именем. Например, если
baseName
параметр в вызове ResourceManager.ResourceManager(String, Assembly) метода указывает корневое имя набора ресурсов без пространства имен, но набор ресурсов назначается пространство имен при его хранении в сборке, вызов ResourceManager.GetString метода вызывает это исключение.Если вы встроили файл ресурсов .resources, содержащий ресурсы языка и региональных параметров по умолчанию в исполняемом файле, и приложение создает MissingManifestResourceExceptionисключение, можно использовать средство отражения, например дизассембллер IL (Ildasm.exe), чтобы определить полное имя ресурса. В ILDasm дважды щелкните метку МАНИФЕСТа исполняемого файла, чтобы открыть окно MANIFEST. Ресурсы отображаются как
.mresource
элементы и отображаются после внешних ссылок на сборки и настраиваемых атрибутов уровня сборки. Можно также скомпилировать следующую простую служебную программу, в которой перечислены полные имена внедренных ресурсов в сборке, имя которой передается в качестве параметра командной строки.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
Вы определяете набор ресурсов по имени файла ресурса (а также необязательному пространству имен) и его расширению файла, а не по его пространству имен и имени корневого файла. Например, это исключение возникает, если набор ресурсов нейтрального языка и региональных параметров называется
GlobalResources
, и вы предоставляете значениеGlobalResources.resources
(а неGlobalResources
) параметруbaseName
ResourceManager.ResourceManager(String, Assembly) конструктора.Набор ресурсов, определенный в вызове метода, не найден, а резервный набор ресурсов не может быть загружен. Например, если вы создаете вспомогательные сборки для английских (США) и региональных параметров (россия), но не удается предоставить набор ресурсов для нейтрального языка и региональных параметров, это исключение возникает, если текущий язык и региональные параметры приложения — английский (Соединенное Королевство).
MissingManifestResourceException использует HRESULT COR_E_MISSINGMANIFESTRESOURCE
, который имеет значение 0x80131532.
MissingManifestResourceException использует реализацию по умолчанию Equals , которая поддерживает равенство ссылок.
Список начальных значений свойств для экземпляра MissingManifestResourceException, см. в разделе MissingManifestResourceException конструкторы.
Примечание.
Рекомендуется включить нейтральный набор ресурсов в основную сборку, поэтому приложение не завершится ошибкой, если вспомогательные сборки недоступны.
приложения универсальной платформы Windows (UWP);
Приложения UWP развертывают ресурсы для нескольких языков и региональных параметров, включая нейтральный язык и региональные параметры, в одном файле индекса ресурсов пакета (PRI). В результате в приложении UWP, если ресурсы для предпочитаемого языка и региональных параметров не удается найти, MissingManifestResourceException создается в любом из следующих условий:
- Приложение не содержит pri-файл или не удалось открыть PRI-файл.
- PRI-файл приложения не содержит набор ресурсов для заданного корневого имени.