Compartilhar via


classe System.Resources.MissingManifestResourceException

Este artigo fornece comentários complementares à documentação de referência para esta API.

Uma MissingManifestResourceException exceção é gerada por diferentes razões em aplicativos .NET versus UWP.

Aplicativos .NET

Em aplicativos .NET, MissingManifestResourceException é lançada quando a tentativa de recuperar um recurso falha porque o conjunto de recursos para a cultura neutra não pôde ser carregado de um assembly específico. Embora a exceção seja gerada quando você tenta recuperar um recurso específico, ela é causada pela falha ao carregar o conjunto de recursos em vez da falha ao localizar o recurso.

Observação

Para obter informações adicionais, consulte a seção "Manipulando uma exceção MissingManifestResourceException" no tópico da classe ResourceManager.

As principais causas da exceção incluem o seguinte:

  • O conjunto de recursos não é identificado pelo nome totalmente qualificado. Por exemplo, se o parâmetro baseName na chamada para o método ResourceManager.ResourceManager(String, Assembly) especificar o nome raiz do conjunto de recursos sem um namespace, mas receber um namespace quando armazenado em seu assembly, a chamada para o método ResourceManager.GetString lançará essa exceção.

    Se você inseriu o arquivo .resources que contém os recursos da cultura padrão em seu executável e seu aplicativo está lançando um MissingManifestResourceException, você pode usar uma ferramenta de reflexão, como o IL Disassembler (Ildasm.exe) para determinar o nome totalmente qualificado do recurso. No ILDasm, clique duas vezes no rótulo MANIFEST do executável para abrir a janela MANIFEST . Os recursos são exibidos como itens de .mresource e são listados após referências de assemblies externos e atributos personalizados a nível de assembly. Você também pode compilar o utilitário simples a seguir, que lista os nomes totalmente qualificados de recursos inseridos no assembly cujo nome é passado para ele como um parâmetro de linha de comando.

    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
    
  • Identifique o recurso definido pelo nome do arquivo de recurso (juntamente com seu namespace opcional) e sua extensão de arquivo, em vez de apenas pelo namespace e pelo nome do arquivo raiz. Por exemplo, essa exceção será gerada se o conjunto de recursos da cultura neutra for nomeado GlobalResources e você fornecer um valor de GlobalResources.resources (em vez de GlobalResources) para o parâmetro baseName do construtor ResourceManager.ResourceManager(String, Assembly).

  • O conjunto de recursos específico da cultura identificado em uma chamada de método não pode ser encontrado e o conjunto de recursos de fallback não pode ser carregado. Por exemplo, se você criar assemblies satélite para as culturas Inglês (Estados Unidos) e Rússia (Russo), mas não fornecer um conjunto de recursos para a cultura neutra, essa exceção será lançada se a cultura atual do seu aplicativo for Inglês (Reino Unido).

MissingManifestResourceException usa o HRESULT COR_E_MISSINGMANIFESTRESOURCE, que tem o valor 0x80131532.

MissingManifestResourceException usa a implementação padrão Equals , que dá suporte à igualdade de referência.

Para obter uma lista de valores de propriedade iniciais de uma instância de MissingManifestResourceException, consulte os construtores de MissingManifestResourceException.

Observação

Recomendamos que você inclua um conjunto neutro de recursos em seu assembly principal, para que seu aplicativo não falhe se um assembly satélite não estiver disponível.

Aplicativos da UWP (Plataforma Universal do Windows)

Os aplicativos UWP implantam recursos para várias culturas, incluindo a cultura neutra, em um único arquivo de índice de recurso de pacote (.pri). Como resultado, em um aplicativo UWP, se os recursos para a cultura preferencial não puderem ser encontrados, o MissingManifestResourceException será gerado em qualquer uma das seguintes condições:

  • O aplicativo não inclui um arquivo .pri ou o arquivo .pri não pôde ser aberto.
  • O arquivo .pri do aplicativo não contém um conjunto de recursos para o nome raiz fornecido.