Vous pouvez recevoir un message d’erreur « System.Resources.MissingManifestResourceException » lorsque vous accédez au fichier .resources du formulaire au moment de l’exécution

Symptômes

Lorsque vous exécutez votre Visual Basic .NET ou Visual Basic 2005, Visual C# .NET ou application Windows Visual J# .NET, vous pouvez recevoir le message d’erreur suivant ou même lorsque vous chargez un formulaire :
Une exception non gérée du type 'System.Resources.MissingManifestResourceException' s’est produite dans mscorlib.dll

Informations supplémentaires : pas pu trouver des ressources appropriées pour la culture spécifiée (ou la culture neutre) dans l’assembly donné. Assurez-vous que « Form1.resources » a été correctement des assembly incorporé ou lié dans « MonApplication ».

nom de base : Form1 locationInfo : nom de fichier de ressources WindowsApplication4.Form1 : Form1.resources assembly : myApplication, Version = 1.0.781.33026, Culture = neutral, PublicKeyToken = null
Si vous cliquez sur Arrêter dans la boîte de dialogue, si vous exécutez le code dans l’environnement de développement intégré (IDE), vous découvrez que, une ligne de code à l’intérieur de l’instruction InitializeComponent provoque ce problème. Par exemple, si vous créez l’exemple à partir de la section « Informations complémentaires », cette erreur se produit en association avec un contrôle ImageList . Bien que le message d’erreur peut faire référence à un autre contrôle, notez que ressources. GetObject s’affiche sur cette ligne de code dans le message d’erreur :
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));

Cause

Ce problème se produit car la classe de formulaire n’est pas la première classe dans le module de code du formulaire.

Remarque Cette spécifiques à un seul article documents cause de ce problème. Il peut exister d’autres situations qui peuvent conduire à des résultats similaires.

Résolution

Pour résoudre ce problème, déplacez tous les autres définitions de classe pour qu’ils apparaissent après la définition de classe du formulaire.

Solution de contournement

Pour contourner ce problème, modifiez la propriété de la Ressource de nom de fichier du fichier .resX du projet. Pour ce faire, procédez comme suit :
  1. Démarrez Visual Studio .NET 2003 ou Visual Studio 2005.
  2. Ouvrez le projet qui contient la classe de formulaire localisée dans lequel vous recevez le message d’erreur qui est mentionné dans la section « Symptômes ».
  3. Dans l’Explorateur de solutions, développez tous les dossiers.
  4. Droit Form1.resX, puis cliquez sur Propriétés.
  5. Dans la boîte de dialogue Pages de propriétés Form1.resX , développez Propriétés de Configuration, puis cliquez sur Général sous les Ressources managées.
  6. Modifiez la propriété Nom de fichier de ressources à partir de $(IntDir) / < espace réservé > . Form1.Resources à $(IntDir) / < espace réservé >. MyForm .resources, puis cliquez sur OK.

    Remarque : MyForm est un espace réservé pour le nom de classe de la classe form que vous localisé.
  7. Appuyez sur CTRL + MAJ + S pour enregistrer le projet. Appuyez sur CTRL + MAJ + B pour générer la solution. Pour plus d’informations, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

    824495 CORRECTIF : vous recevez un message d’erreur « MissingManifestResourceException » lorsque vous ajoutez une ressource liée dans Visual Studio .NET 2003

  8. Appuyez sur F5 pour exécuter l’application. L’application s’exécute et le formulaire Form1 est affiché.
.

État

Ce comportement est voulu par la conception.

Plus d'informations

Un module de code de formulaire peut contenir plusieurs classes. Lorsque le projet est généré, le système de génération doit décider de quelle classe à utiliser pour créer le fichier .resources. La conception du système de génération de projet spécifie que la première classe dans le module de code est la classe sur laquelle repose le fichier .resources. Le fichier .resources est nommé en fonction de cette classe, et non le nom du formulaire. Dans la plupart des cas, ces deux noms sont les mêmes. Toutefois, si ces noms diffèrent, vous recevez le message d’erreur qui est mentionné dans la section « Symptômes ».

Lorsque vous chargez le formulaire au moment de l’exécution, la méthode InitializeComponent peut-être obtenir des objets à partir du fichier .resources. InitializeComponent recherche le fichier .resources nom_formulairedans l’assembly. Dans la mesure où l’initiale
Nom_formulairefichier .resources n’a jamais créé ou lié à l’assembly, l’échec de la tentative d’extraire le fichier .resources.

Procédure pour reproduire le comportement

  1. Créez un projet Application Windows dans Visual Basic .NET ou Visual Basic 2005, Visual C# .NET ou Visual J# .NET. Form1 est créé par défaut. Remarque Dans Visual Studio 2005, le message d’avertissement suivant s’affiche :
    Impossible d’ajouter les composants en mode de localisation. Dans la propriété Language pour revenir au formulaire par défaut et ajouter des composants, sélectionnez (par défaut).
    Remarque Vous devez modifier le code dans Visual Basic 2005. Par défaut, Visual Basic crée deux fichiers pour le projet lorsque vous créez un projet Windows Forms. Si le formulaire est nommé Form1, les deux fichiers qui représentent le formulaire sont nommés Form1.vb et Form1.Designer.vb. Vous écrivez le code dans le fichier Form1.vb. Le Concepteur Windows Forms écrit le code dans le fichier Form1.Designer.vb. Le Concepteur Windows Forms utilise le mot clé partial pour diviser l’implémentation de Form1 en deux fichiers distincts. Ce comportement empêche le code généré par le Concepteur d’être entrecoupé par votre code.

    Pour plus d’informations sur les nouvelles améliorations du langage Visual Basic 2005, visitez le site Web de Microsoft Developer Network (MSDN) à l’adresse suivante :

    Pour plus d’informations sur les classes partielles et le Concepteur Windows Forms, visitez le site Web MSDN suivant :

  2. Ajoutez un contrôle ImageList à Form1.
  3. Ajouter un fichier d’icônes pour le contrôle ImageList .
  4. Dans le module de code de Form1, ajoutez le code suivant avant la définition de Form1 : Visual Basic .NET :
    Public Class someClassEnd Class

    Visual C# .NET et Visual J# .NET :
    public class someClass{
    }

  5. Générez le projet. Notez que le projet a été généré avec succès.
  6. Exécutez le projet. Notez que vous recevez le message d’erreur qui est mentionné dans la section « Symptômes ».
Propriétés

ID d'article : 318603 - Dernière mise à jour : 9 janv. 2017 - Révision : 1

Commentaires