La situation:
- J'ai une bibliothèque de classes, appelée
RT.Servers
, contenant quelques ressources (de typebyte[]
, mais je ne pense pas que ce soit important) - La même bibliothèque de classes contient une méthode qui renvoie l'une de ces ressources
- J'ai un programme simple (avec une référence à cette bibliothèque) qui n'appelle que cette seule méthode
J'obtiens un MissingManifestResourceException
avec le message suivant:
Impossible de trouver des ressources appropriées pour la culture spécifiée ou la culture neutre. Assurez-vous que «Servers.Resources.resources» a été correctement intégré ou lié dans l'assembly «RT.Servers» au moment de la compilation, ou que tous les assemblys satellites requis sont chargeables et entièrement signés.
Je n'ai jamais joué avec les cultures, ni avec la signature de l'assemblée, donc je ne sais pas ce qui se passe ici. En outre, cela fonctionne dans un autre projet qui utilise la même bibliothèque. Des idées?
Réponses:
Tout ce que j'avais à faire pour résoudre ce problème était de cliquer avec le bouton droit sur le
Resources.resx
fichier dans l'Explorateur de solutions et de cliquer sur Exécuter l'outil personnalisé . Cela recrée leResources.Designer.cs
fichier généré automatiquement .Si le fichier .resx a été ajouté manuellement au projet, la propriété Outil personnalisé du fichier doit être définie sur "ResXFileCodeGenerator".
Le problème est dû à une incompatibilité d'espaces de noms, qui se produit si vous modifiez «l'espace de noms par défaut» de l'assembly dans les paramètres du projet. (Je l'ai changé de (auparavant)
"Servers"
à (maintenant)"RT.Servers"
.)Dans le code généré automatiquement dans
Resources.Designer.cs
, il y a le code suivant:La chaîne littérale
"Servers.Resources"
a dû être remplacée par"RT.Servers.Resources"
. Je l'ai fait manuellement, mais exécuter l'outil personnalisé l'aurait également bien fait.la source
Je viens de rencontrer ce problème aujourd'hui et j'ai trouvé cette page d'aide et de support Microsoft qui contournait réellement le problème.
J'avais quelques délégués en haut de mon fichier, dans l'espace de noms global, et tout à coup, j'obtenais un
MissingManifestResourceException
lors de l'exécution du programme, sur cette ligne:Ensuite, j'ai déplacé les délégués dans l'espace de noms, j'ai eu la même erreur. Enfin, j'ai mis les délégués dans la seule classe de ce fichier, et l'erreur a disparu, mais je ne voulais pas que les délégués soient dans cette classe ou cet espace de noms.
Puis je suis tombé sur ce lien ci-dessus, qui disait
J'ai mis les délégués (que je ne considérerais pas comme des «définitions de classe») au bas de ce fichier, en dehors de l'espace de noms local, et le programme ne les a
MissingManifestResourceException
plus. Quelle erreur irritante. Mais cela semble être une solution plus robuste que de modifier le code généré automatiquement :)la source
J'ai rencontré un problème similaire et, bien que je sache que ce n'est pas la cause du PO, je le posterai ici afin que si quelqu'un d'autre rencontre ce problème à l'avenir, une réponse soit disponible.
Si vous ajoutez une classe avant la classe de concepteur, vous obtiendrez une
MissingManifestResourceException
exception à l'exécution (pas d'erreur ou d'avertissement à la compilation) carPour (légèrement) plus d'informations, consultez cet article .
la source
J'ai eu le même problème, mais l'utilisation de la commande Exécuter l'outil personnalisé comme suggéré par Timwi n'a pas aidé dans mon cas.
Cependant, cela m'a conduit dans la bonne direction, car je me suis retrouvé dans les propriétés du fichier .resx . Ici, j'ai remarqué une différence avec un autre fichier .resx qui n'a causé aucun problème.
Dans mon cas, j'ai dû changer la propriété "Build Action" de "Resource" à "Embedded Resource".
Ma meilleure estimation pour la raison est que j'avais le .resx dans une bibliothèque qui a été utilisée à partir d'une autre application. Mon application n'avait pas son propre fichier .resx , elle devait donc utiliser celui de la bibliothèque - qui n'est disponible que lorsqu'il est incorporé dans la bibliothèque et non "autonome".
la source
Lorsque je lance un problème similaire, dans Vs 2012, il s'est avéré que la propriété "Espace de nom de l'outil personnalisé" du fichier resx était erronée (dans mon cas, en fait, elle n'était pas définie, donc le code généré a produit cette exception lors de l'exécution) . Mon ensemble final de propriétés pour le fichier resx était quelque chose comme ceci:
la source
Voir également: MissingManifestResourceException lors de l'exécution de tests après la création avec MSBuild (.mresource a un chemin dans le manifeste)
Je répète la réponse ici juste pour être complète:
Il semble que l'ajout de LogicalName au fichier de projet le corrige:
c'est-à-dire que l'entrée de ressource intégrée dans le fichier de projet ressemble à ceci:
Ceci est détaillé dans: http://blogs.msdn.com/b/msbuild/archive/2007/10/19/manifest-resource-names-changed-for-resources-files.aspx
Notez que nous utilisons un fichier .resx, mais le bogue semble toujours se produire.
Mise à jour: Le problème avec les ressources (y compris XAML) semble être lié aux chemins de sortie et à l'utilisation de barres obliques vers l'avant ou vers l'arrière, comme indiqué dans: Pourquoi la modification des répertoires de sortie du projet provoque-t-elle: IOException n'a pas été gérée "Impossible de localiser la ressource 'app.xaml' . "
la source
J'ai rencontré une cause différente de ce problème, qui n'était pas liée aux fichiers resx. J'avais une bibliothèque de classes où AssemblyInfo.cs contenait ce qui suit:
L'assembly ne contenait aucun code WPF, thème ou dictionnaires de ressources. Je me suis débarrassé de l'exception en supprimant l'attribut ThemeInfo.
Je n'ai pas eu d'exception réelle, seulement
Affichage des détails de l'exception, le système demandait MyAssembly.g.resources
J'espère que cela pourrait aider quelqu'un d'autre.
la source
Je ne suis pas sûr que cela aidera les gens, mais celui-ci a fonctionné pour moi:
Donc, le problème que j'ai eu était que je recevais le message suivant:
J'essayais d'obtenir les ressources intégrées dans mon projet à partir d'une autre bibliothèque de classes.
Ce que j'ai fait pour résoudre le problème était de définir le modificateur d'accès dans l'onglet Projet-> Propriétés-> Ressources de "Interne" (accessible uniquement dans la même bibliothèque de classes) à "Public" (accessible depuis une autre bibliothèque de classes)
Alors lancez et voilà, plus d'erreur pour moi ...
la source
La solution proposée par BlaM a également fonctionné pour moi.
Je suis un utilisateur VS 2013. Après avoir traversé de nombreuses corrections mais pas de chance, j'ai essayé ceci:
C'est tout! :)
la source
J'ai eu le même problème, mais dans mon cas, je place une classe dans un contrôle utilisateur qui est lié au contrôle utilisateur comme celui-ci
La solution était de déplacer le
MyUserControlObject
à la fin de la classe Usercontrol, comme ceciJ'espère que ça aide
la source
J'obtenais l'erreur MissingManifestResourceException après avoir porté mon projet de VS2005 à VS2010. Je n'avais aucune autre classe définie dans le fichier contenant ma classe Form. Et j'ai également fait définir correctement mon nom de fichier de ressources resx. Ça n'a pas marché.
J'ai donc supprimé les fichiers resx et les ai régénérés. Tout va bien maintenant.
la source
Récemment rencontré le même problème, lutté un peu, trouvé ce sujet mais aucune réponse n'était correcte pour moi.
Mon problème était que lorsque j'ai supprimé la fenêtre principale de mon projet WPF (elle n'a pas de fenêtre principale), j'ai oublié de supprimer
StartupUri
deApp.xaml
. Je suppose que cette exception peut se produire si vous avez une erreurStartupUri
, donc au cas où si quelqu'un a du mal à ce sujet - vérifier votreStartupUri
enApp.xaml
.la source
Récemment tombé sur ce problème, dans mon cas, j'ai fait quelques choses:
Assurez-vous que les espaces de noms sont cohérents dans le fichier Designer.cs du fichier resx
Assurez-vous que l'espace de noms par défaut de l'assembly (cliquez avec le bouton droit sur le projet et choisissez Propriétés) est défini de la même manière que l'espace de noms dans lequel se trouve le fichier de ressources.
Une fois que j'ai fait l'étape 2, l'exception a disparu.
la source
J'ai eu ce problème lorsque j'ai ajouté une autre classe dans le fichier juste avant la classe dérivée de Form. L'ajout après avoir résolu le problème.
la source
La même erreur peut également se produire lorsque vous placez une nouvelle classe dans le code source d'une classe de formulaire créée par un concepteur.
Cette nouvelle classe peut être supprimée et placée dans un autre fichier cs.
(Au moins dans mon cas, c'était le problème ...)
la source
Parce que je pré-compile mon application Web (en utilisant la fonction de publication VS2012). J'obtenais l'erreur ci-dessus. J'ai essayé toutes les suggestions, mais changer bizarrement «Action de construction» en «Contenu» a fait l'affaire!
la source
Dans mon cas, j'ai une API Web avec des ressources et je crée un package nuget à partir de cela. Lorsque j'utilise ce nuget dans d'autres projets, je me rends compte que lorsque je demande une api avec des ressources,
MissingManifestResourceException
après quelques recherches, j'apprends que le packager de nuget n'emballe pas automatiquement les ressources. Si vous souhaitez utiliser des fichiers de ressources, vous devez le faire manuellement. Vous devez donc ajouter les lignes ci-dessous à votre fichier .nuspec: (Visitez https://github.com/NuGet/Home/issues/1482 )Mais, avant d'ajouter des fichiers, vous devez être sûr de la version de .net que vous utilisez.
la source
J'ai eu le avec un projet F # nouvellement créé. La solution était de décocher "Utiliser les noms de ressources standard" dans les propriétés du projet -> Application -> Ressources / Spécifier comment les ressources de l'application seront gérées. Si vous ne voyez pas la case à cocher, mettez à jour votre Visual Studio! J'ai installé 15.6.7. Dans 15.3.2, cette case à cocher n'est pas là.
la source
Juste pour mentionner. Si vous utilisez une constante ou un littéral, assurez-vous qu'il fait référence à une ressource du formulaire
ProjectName.Resources
et ne cpntainResources.resx
.Cela pourrait vous faire gagner une heure ou deux.
la source
J'ai rencontré ce problème avec un projet C ++ géré basé sur WinForms après avoir renommé l'espace de noms global (pas manuellement, mais avec l'outil Renommer de VS2017).
La solution est simple, mais n'est pas mentionnée ailleurs.
Vous devez modifier l'
RootNamespace
entrée dans vcxproj-file pour qu'elle corresponde à l'espace de noms C ++.la source
Dans mon cas, c'était une faute de frappe dans le Xaml d'une fenêtre ouverte à partir du formulaire Winforms:
Incorrect:
<Image Source="/Resources/WorkGreen.gif"/>
Correct:
<Image Source="../Resources/WorkGreen.gif"/>
cela peut aider quelqu'unla source
Sur la page de support Microsoft :
Pour contourner ce problème, spécifiez le nom de fichier du fichier .resources lorsque vous exécutez Resgen.exe. Lorsque vous spécifiez le nom de fichier du fichier .resources, assurez-vous que le nom de fichier commence par le nom de l'espace de noms de votre application. Par exemple, exécutez la commande suivante à l'invite de commandes Microsoft Visual Studio .NET pour créer un fichier .resources qui porte le nom d'espace de noms de votre application au début du nom de fichier:
la source