209 votes

Impossible de trouver des ressources appropriées pour la culture spécifiée ou la culture neutre.

J'ai deux projets Web ASP.NET (ProjetA et ProjetB). Lorsqu'une classe dans ProjectA instancie une classe de ProjectB qui utilise un fichier de ressources Blah.resx, je reçois cette erreur :

Une exception de type 'System.Resources.MissingManifestResourceException' s'est produite dans mscorlib.dll mais n'a pas été gérée dans le code utilisateur.

Aucune ressource appropriée n'a été trouvée pour la culture spécifiée ou la culture neutre. Assurez-vous que "Resources.Blah.resources" a été correctement incorporé ou lié à l'assembly "App_GlobalResources.sn_flri6" au moment de la compilation, ou que toutes les assemblies satellites nécessaires sont chargées et entièrement signées.

Qu'est-ce qui cause cela ?

Il y a un article sur le site de Microsoft à ce sujet http://support.microsoft.com/kb/318603 qui suggère :

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

C'est une solution pour les projets Windows Forms, je ne suis pas sûr que cela s'applique également aux projets Web.

0 votes

Quel type de projets sont-ils? 2 sites web? 1 site web, 1 bibliothèque de classes?

0 votes

Deux projets de site Web ASP.NET.

0 votes

Cette réponse a résolu le problème pour moi! GetGlobalResourceObject

266voto

CFinck Points 1141

Je viens de rencontrer cette même exception dans un projet WPF. Le problème est survenu au sein d'une assembly que nous avons récemment déplacée vers un autre espace de noms (ProblemAssembly.Support à ProblemAssembly.Controls). L'exception se produisait lors de la tentative d'accès à des ressources provenant d'un deuxième fichier de ressources présent dans l'assembly.

Il s'est avéré que le fichier de ressources additionnel n'avait pas correctement mis à jour les références du vieux nom d'espace de noms vers le nouveau nom d'espace de noms.

Dans le designer.cs du fichier de ressources, il y a une propriété statique pour obtenir le gestionnaire de ressources. À l'intérieur de ce getter, la chaîne faisait toujours référence à l'ancien espace de noms. Une fois corrigée vers le nouveau espace de noms, le problème a été résolu :

global::System.Resources.ResourceManager temp = 
     new global::System.Resources.ResourceManager(
          "ProblemAssembly.Support.Properties.Stuff", typeof(Stuff).Assembly);

la dernière ligne aurait dû être :

global::System.Resources.ResourceManager temp = 
     new global::System.Resources.ResourceManager(
          "ProblemAssembly.Controls.Properties.Stuff", typeof(Stuff).Assembly);

1 votes

Veuillez traduire ceci en conservant les mêmes balises HTML s'il y en a de en à fr : lien : Documentation MSDN pour la classe ResourceManager.

3 votes

Merci, cela m'a aidé à résoudre ce problème. On peut également supprimer le fichier de conception, puis ouvrir et enregistrer à nouveau le fichier resx pour régénérer correctement le fichier de conception.

1 votes

J'ai rencontré le même problème et c'était la réponse que je cherchais. Malheureusement, cela ne s'affiche pas lors de la compilation :-( Merci

121voto

Sibi Elango Points 389

J'ai résolu le problème de cette manière :

  1. Cliquez avec le bouton droit sur votre fichier de ressources, puis sur "Propriétés"
  2. Changez la propriété "Build Action" de "Compiler" à "Ressource intégrée"
  3. Ensuite, compilez et exécutez

Cela fonctionne parfaitement.

0 votes

@sibi Elango Je fais un clic droit sur mon fichier de ressources mais je ne trouve pas la partie Action de construction.

1 votes

@S5498658 Si vous ne voyez pas cela dans le menu contextuel (clic droit), regardez dans le panneau Propriétés (généralement situé en dessous de l'explorateur de solutions).

0 votes

Son action de construction mais cela ne fonctionne toujours pas. J'ai aussi vérifié le répertoire et le répertoire est le même dans les propriétés.

28voto

Mark Lakata Points 3458

Lorsque j'ai essayé de partager un fichier resource.resx d'un projet C# avec un autre projet C#, j'ai rencontré ce problème. La suggestion de déplacer la classe Form au début de son fichier n'était pas appropriée. Voici comment j'ai résolu le problème. Vous devez essentiellement utiliser un lien du deuxième projet vers le premier, puis activer la régénération du fichier resource.designer.cs.

  1. Supprimez le fichier Properties/Resources.resx du deuxième projet
  2. Ajoutez le fichier Properties/Resources.resx du premier projet en tant que LIEN vers le dossier Properties dans le deuxième projet. Ne l'ajoutez pas au niveau racine du projet.
  3. Ne ajoutez pas le fichier Properties/Resources.designer.cs du premier projet !
  4. Dans les propriétés du fichier Resources.resx du deuxième projet, ajoutez ResXFileCodeGenerator en tant que CustomTool
  5. Cliquez avec le bouton droit sur le fichier Resources.resx et sélectionnez "Exécuter l'outil personnalisé". Cela générera un nouveau fichier designer.cs.

Remarque : Je vous conseille d'éviter de modifier le fichier resource.designer.cs, car il est généré automatiquement.

3voto

Subbu Points 184

Une approche serait de mettre les classes / ressources partagées dans un projet de bibliothèque de classes séparé et de les référencer dans les deux sites web.

2 votes

Certainement, c'est le même problème alors, n'est-ce pas ?

3voto

Mathieu Leblanc Points 316

Merci @CFinck ! Juste pour ajouter un conseil aux autres : J'ai changé la ligne de ResourceManager avec ceci :

Nouveau Global.System.Resources.ResourceManager(Reflection.Assembly.GetCallingAssembly.GetName.Name & ".NomCommunDe.Resources", Reflection.Assembly.GetCallingAssembly())

Je suis en vb.net mais je pense qu'en C#, la seule différence serait + au lieu de & pour concaténer les chaînes.

De cette manière, je peux utiliser les mêmes fichiers d'assemblage liés dans deux projets similaires qui partagent les ressources.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X