Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье приводятся дополнительные замечания к справочной документации по этому API.
В MissingManifestResourceException приложениях .NET и UWP исключение выбрасывается по разным причинам.
Приложения .NET
В приложениях .NET генерируется исключение MissingManifestResourceException в случае, если попытка получить ресурс неудачна, поскольку не удалось загрузить набор ресурсов для нейтральной культуры из конкретной сборки. Хотя исключение возникает при попытке получить определенный ресурс, это вызвано сбоем загрузки набора ресурсов, а не сбоем поиска ресурса.
Примечание.
Дополнительные сведения см. в разделе "Обработка исключения MissingManifestResourceException" в теме класса ResourceManager.
Основными причинами исключения являются следующие:
Набор ресурсов не определяется его полным именем. Например, если параметр
baseName
в вызове метода ResourceManager.ResourceManager(String, Assembly) указывает корневое имя набора ресурсов, без пространства имен, но набор ресурсов получает пространство имен при хранении в своей сборке, то вызов метода ResourceManager.GetString приводит к этому исключению.Если вы встроили файл .resources, содержащий ресурсы культуры по умолчанию в свой исполняемый файл, и если ваше приложение выдает MissingManifestResourceExceptionисключение, можно использовать средство отражения, такое как IL Disassembler (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($"{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
Вы определяете набор ресурсов по имени файла ресурса (а также необязательному пространству имен) и его расширению файла, а не по его пространству имен и имени корневого файла. Например, это исключение возникает, если набор ресурсов нейтрального языка и региональных параметров называется
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-файл приложения не содержит набор ресурсов для заданного корневого имени.