Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article fournit des remarques supplémentaires à la documentation de référence de cette API.
Une exception MissingManifestResourceException est levée pour différentes raisons dans les applications .NET et UWP.
Applications .NET
Dans les applications .NET, l'exception 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 de l'exception MissingManifestResourceException » dans le contexte de la classe ResourceManager.
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
baseNameparamè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 intégré le fichier .resources contenant les ressources de la culture par défaut dans votre exécutable et que votre application génère une exception 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
.mresourceet sont répertoriées après les références d'assemblage externe et les attributs personnalisés au niveau de l'assemblage. 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($"{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 ModuleVous 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é
GlobalResourceset que vous fournissez une valeur (GlobalResources.resourcesau lieu deGlobalResources) aubaseNameparamè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 Anglais (États-Unis) et Russe (Russe), mais que vous ne parvenez pas à fournir un ensemble 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 Equals , qui prend en charge l’égalité des références.
Pour obtenir la liste des valeurs de propriété initiales d’une instance de MissingManifestResourceException, consultez les 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 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 préférée sont introuvables, l'exception MissingManifestResourceException est levée sous l'une des conditions suivantes :
- 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é.