System.Resources.MissingManifestResourceException classe

Este artigo fornece observações complementares à documentação de referência para essa API.

Uma MissingManifestResourceException exceção é lançada por motivos diferentes em aplicativos .NET versus UWP.

Aplicativos .NET

Em aplicativos .NET, MissingManifestResourceException é lançado 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 lançada quando você tenta recuperar um recurso específico, ela é causada pela falha ao carregar o conjunto de recursos em vez da falha em localizar o recurso.

Observação

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

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

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

    Se você tiver incorporado o arquivo .resources que contém os recursos da cultura padrão em seu executável e seu aplicativo estiver lançando um MissingManifestResourceException, poderá 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 aparecem como .mresource itens e são listados após referências de assembly externo e atributos personalizados no nível do assembly. Você também pode compilar o seguinte utilitário simples, que lista os nomes totalmente qualificados de recursos incorporados 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("{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
    
  • Você identifica o conjunto de recursos por seu nome de arquivo de recurso (junto com seu namespace opcional) e sua extensão de arquivo, em vez de apenas por seu namespace e nome de arquivo raiz. Por exemplo, essa exceção será lançada se o conjunto de recursos da cultura neutra for nomeado GlobalResources e você fornecer um valor de (em vez de GlobalResourcesGlobalResources.resources ) para o baseNameResourceManager.ResourceManager(String, Assembly) parâmetro do construtor.

  • O conjunto de recursos específicos 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 aplicativo for inglês (Reino Unido).

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

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

Para obter uma lista de valores de propriedade inicial para uma instância do MissingManifestResourceException, consulte o MissingManifestResourceException construtores.

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 recursos de pacote (.pri). Como resultado, em um aplicativo UWP, se os recursos para a cultura preferencial não puderem ser encontrados, o MissingManifestResourceException será lançado sob 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.