Classe System.Resources.MissingManifestResourceException

Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.

Viene generata un'eccezione MissingManifestResourceException per diversi motivi in .NET rispetto alle app UWP.

App .NET

Nelle app .NET viene MissingManifestResourceException generata quando il tentativo di recuperare una risorsa non riesce perché non è stato possibile caricare il set di risorse per le impostazioni cultura neutre da un determinato assembly. Anche se l'eccezione viene generata quando si tenta di recuperare una determinata risorsa, è causato dall'errore di caricare il set di risorse anziché dall'errore di trovare la risorsa.

Nota

Per altre informazioni, vedere la sezione "Gestione di un'eccezione MissingManifestResourceException" nell'argomento della ResourceManager classe.

Le cause principali dell'eccezione includono quanto segue:

  • Il set di risorse non è identificato dal nome completo. Ad esempio, se il baseName parametro nella chiamata al ResourceManager.ResourceManager(String, Assembly) metodo specifica il nome radice del set di risorse senza uno spazio dei nomi, ma al set di risorse viene assegnato uno spazio dei nomi quando viene archiviato nell'assembly ResourceManager.GetString , la chiamata al metodo genera questa eccezione.

    Se è stato incorporato il file con estensione resources che contiene le risorse delle impostazioni cultura predefinite nel file eseguibile e l'app genera un MissingManifestResourceExceptionoggetto , è possibile usare uno strumento di reflection, ad esempio il disassembler IL (Ildasm.exe) per determinare il nome completo della risorsa. In ILDasm fare doppio clic sull'etichetta MANIFEST dell'eseguibile per aprire la finestra MANIFEST. Le risorse vengono visualizzate come .mresource elementi e vengono elencate dopo i riferimenti ad assembly esterni e gli attributi a livello di assembly personalizzati. È anche possibile compilare l'utilità semplice seguente, che elenca i nomi completi delle risorse incorporate nell'assembly il cui nome viene passato come parametro della riga di 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
    
  • È possibile identificare il set di risorse in base al nome del file di risorse (insieme allo spazio dei nomi facoltativo) e all'estensione del file anziché in base allo spazio dei nomi e al nome del file radice. Ad esempio, questa eccezione viene generata se il set di risorse delle impostazioni cultura neutre è denominato GlobalResources e si specifica un valore ( GlobalResources.resources anziché GlobalResources) al baseName parametro del ResourceManager.ResourceManager(String, Assembly) costruttore.

  • Impossibile trovare il set di risorse specifico delle impostazioni cultura identificato in una chiamata al metodo e non è possibile caricare il set di risorse di fallback. Ad esempio, se crei assembly satellite per le impostazioni cultura inglese (Stati Uniti) e Russia (russo), ma non fornisci un set di risorse per le impostazioni cultura neutre, questa eccezione viene generata se le impostazioni cultura correnti dell'app sono inglese (Regno Unito).

MissingManifestResourceException usa HRESULT COR_E_MISSINGMANIFESTRESOURCE, che ha il valore 0x80131532.

MissingManifestResourceException usa l'implementazione predefinita Equals , che supporta l'uguaglianza dei riferimenti.

Per un elenco di valori di proprietà iniziali per un'istanza di MissingManifestResourceException, vedere il MissingManifestResourceException costruttori.

Nota

Ti consigliamo di includere un set neutro di risorse nell'assembly principale, quindi l'app non avrà esito negativo se un assembly satellite non è disponibile.

App UWP (Universal Windows Platform)

Le app UWP distribuiscono risorse per più impostazioni cultura, incluse le impostazioni cultura neutre, in un singolo file di indice delle risorse del pacchetto (con estensione pri). Di conseguenza, in un'app UWP, se non è possibile trovare risorse per le impostazioni cultura preferite, viene MissingManifestResourceException generata in una delle condizioni seguenti:

  • L'app non include un file con estensione pri o non è stato possibile aprire il file pri.
  • Il file pri dell'app non contiene un set di risorse per il nome radice specificato.