Partager via


Classe System.Resources.MissingManifestResourceException

Cet article vous offre des remarques complémentaires à la documentation de référence pour cette API.

Une MissingManifestResourceException exception est levée pour différentes raisons dans les applications .NET et UWP.

Applications .NET

Dans les applications .NET, MissingManifestResourceException est levée lorsque la tentative de récupération d’une ressource échoue, car la ressource définie pour la culture neutre n’a pas pu être chargée à partir d’un assembly particulier. Bien que l’exception soit levée lorsque vous essayez de récupérer une ressource particulière, elle est due à l’échec du chargement du jeu de ressources plutôt que de l’échec de la recherche de la ressource.

Remarque

Pour plus d’informations, consultez la section « Gestion d’une exception MissingManifestResourceException » dans la ResourceManager rubrique de classe.

Les principales causes de l’exception sont les suivantes :

  • L’ensemble de ressources n’est pas identifié par son nom complet. Par exemple, si le baseName paramètre de l’appel à la ResourceManager.ResourceManager(String, Assembly) méthode spécifie le nom racine du jeu de ressources sans espace de noms, mais que le jeu de ressources est affecté à un espace de noms lorsqu’il est stocké dans son assembly, l’appel à la ResourceManager.GetString méthode lève cette exception.

    Si vous avez incorporé le fichier .resources qui contient les ressources de la culture par défaut dans votre exécutable et que votre application lève un MissingManifestResourceException, vous pouvez utiliser un outil de réflexion tel que le désassembleur IL (Ildasm.exe) pour déterminer le nom complet de la ressource. Dans ILDasm, double-cliquez sur l’étiquette MANIFEST de l’exécutable pour ouvrir la fenêtre MANIFEST. Les ressources apparaissent en tant qu’éléments .mresource et sont répertoriées après les références d’assembly externe et les attributs personnalisés au niveau de l’assembly. Vous pouvez également compiler l’utilitaire simple suivant, qui répertorie les noms complets des ressources incorporées dans l’assembly dont le nom est transmis en tant que paramètre de ligne de commande.

    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
    
  • Vous identifiez la ressource définie par son nom de fichier de ressource (ainsi que son espace de noms facultatif) et son extension de fichier plutôt que par son espace de noms et son nom de fichier racine seul. Par exemple, cette exception est levée si le jeu de ressources de la culture neutre est nommé GlobalResources et que vous fournissez une valeur ( GlobalResources.resources au lieu de GlobalResources) au baseName paramètre du ResourceManager.ResourceManager(String, Assembly) constructeur.

  • Le jeu de ressources spécifique à la culture identifié dans un appel de méthode est introuvable et le jeu de ressources de secours ne peut pas être chargé. Par exemple, si vous créez des assemblys satellites pour les cultures anglaises (États-Unis) et russes (russes), mais que vous ne parvenez pas à fournir un jeu de ressources pour la culture neutre, cette exception est levée si la culture actuelle de votre application est l’anglais (Royaume-Uni).

MissingManifestResourceException utilise HRESULT COR_E_MISSINGMANIFESTRESOURCE, qui a la valeur 0x80131532.

MissingManifestResourceException utilise l’implémentation par défaut de Equals, qui prend en charge l’égalité des références.

Pour obtenir la liste des valeurs initiales des propriétés d’une instance de MissingManifestResourceException, consultez le MissingManifestResourceException constructeurs.

Remarque

Nous vous recommandons d’inclure un ensemble neutre de ressources dans votre assembly principal, afin que votre application ne échoue pas si un assembly satellite n’est pas disponible.

Applications de la plateforme Windows universelle (UWP)

Les applications UWP déploient des ressources pour plusieurs cultures, y compris la culture neutre, dans un seul fichier d’index de ressources de package (.pri). Par conséquent, dans une application UWP, si des ressources pour la culture par défaut sont introuvables, l’une MissingManifestResourceException des conditions suivantes est levée :

  • L’application n’inclut pas de fichier .pri ou le fichier .pri n’a pas pu être ouvert.
  • Le fichier .pri de l’application ne contient pas de ressource définie pour le nom racine donné.