Ce n'MissingManifestResourceException dire et comment le résoudre?
La situation:
- J'ai une bibliothèque de classe, appelée
RT.Servers
, contenant un peu de ressources (de typebyte[]
, mais je ne pense pas que c'est important) - La même bibliothèque de classe contient une méthode qui retourne un de ces ressources
- J'ai un programme simple (avec une référence à la bibliothèque) que seuls les appels de méthode unique
- Je obtenir un MissingManifestResourceException
avec le message suivant:
Ne pouvais pas trouver toutes les ressources
approprié pour la culture spécifiée
ou la culture neutre. Assurez-vous que
"Les serveurs.Les ressources.ressources" a été
correctement lié ou incorporé dans
assemblée "RT.Les serveurs" au moment de la compilation,
ou que tous les assemblys satellites
requis sont chargeables et entièrement
signé.
Je n'ai jamais joué avec les cultures, ou avec la signature de l'assembly, donc je ne sais pas ce qui se passe ici. Aussi, cela fonctionne dans un autre projet qui utilise la même bibliothèque. Des idées?
- C'est l'un des plus inutiles les exceptions dans .NET. Il déclenche dans au moins 3 scénarios qui partagent rien en commun.
- Désolé, mais c'est un Microsoft façon: supprimer tout, puis ajouter à nouveau. Fonctionne pour les ressources, NUGET, les références et les chaînes de connexion. Il y a beaucoup d'outils, mais vous aurez passé du temps pour les fichiers raw non-cas habituels...
Vous devez vous connecter pour publier un commentaire.
Tout ce que je devais faire pour résoudre ce problème est de cliquer droit sur l'
Resources.resx
fichier dans l'Explorateur de solutions, puis cliquez sur Exécuter l'Outil Personnalisé. Cette re-génère auto-généréResources.Designer.cs
fichier.Si l' .fichier resx a été ajouté au projet manuellement, l'Outil Personnalisé de la propriété du fichier doit être mis à "ResXFileCodeGenerator".
Le problème est dû à une incompatibilité des espaces de noms, ce qui se produit si vous modifiez l' "espace de noms par défaut" de l'assemblée dans les paramètres du projet. (J'ai changé depuis (déjà)
"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 changé pour"RT.Servers.Resources"
. Je l'ai fait manuellement, mais l'exécution de l'outil personnalisé aurait tout aussi bien fait.Je viens de tomber sur ce problème aujourd'hui, et j'ai trouvé cette Aide et de Support Microsoft page qui fait contourner le problème.
J'ai eu un couple de délégués en haut de mon fichier, en l'espace de noms global, et tout d'un coup j'ai été faire un
MissingManifestResourceException
lors de l'exécution du programme, sur cette ligne:Puis j'ai déménagé les délégués dans l'espace de noms, a obtenu le même message d'erreur. Enfin j'ai mis les délégués dans la seule classe dans ce fichier, et l'erreur est allé loin, mais je ne voulais pas les délégués de la classe ou de l'espace de noms.
Puis je suis tombé sur ce lien ci-dessus, qui dit
J'ai mis les délégués (dont je ne serait pas en compte "les définitions de classe") au bas de ce fichier, à l'extérieur de l'espace de noms local, et le programme n'a pas la
MissingManifestResourceException
plus. Ce qu'est un irritant erreur. Mais, cela semble être une solution plus robuste que de modifier le code généré automatiquement 🙂J'ai couru dans un problème similaire et, même si je sais que ce n'est pas la cause de l'OP, je vais le poster ici afin que si quelqu'un d'autre s'étend à travers ce problème à l'avenir une réponse sera disponible.
Si vous ajoutez une classe avant la classe de concepteur, vous obtiendrez un
MissingManifestResourceException
exception lors de l'exécution (pas d'erreur de compilation ou d'avertissement) parce quePour (un peu) plus d'informations, voir ce post.
J'ai eu le même problème, mais à l'aide de la Exécuter l'Outil Personnalisé commande comme suggéré par Timwi n'aide pas dans mon cas.
Cependant il me conduire dans la bonne direction, parce que je me suis retrouvé dans le Propriétés de la .resx fichier. Ici, j'ai remarqué une différence à l'autre .resx fichier qui a causé aucun problème.
Dans mon cas, j'ai dû changer la propriété "Action de génération" à partir de "Ressource" pour "Ressource Incorporée".
De mon mieux pour deviner la raison en est, que j'ai eu la .resx dans une bibliothèque qui a été utilisé par une autre application. Ma demande n'a pas son propre .resx fichier, de sorte qu'il a dû utiliser l'une à partir de la bibliothèque, qui est seulement disponible quand il est incorporé dans la bibliothèque et non pas "stand alone".
Quand je le lance dans un sujet similaire, dans Vs 2012, il s'est avéré que la "un Outil Personnalisé de l'espace de Noms" propriété du fichier resx était fausse (dans mon cas, en fait, elle a été supprimée, de sorte que le code généré production de cette exception à l'exécution).
Ma dernière série de propriétés du fichier resx était quelque chose comme ceci:
Voir aussi: MissingManifestResourceException lors de l'exécution de tests après la construction avec MSBuild (.mresource a chemin dans le manifeste)
Je le répète ici, la réponse juste pour être complet:
Il semble ajoutant Type du dossier de projet fixe:
c'est à dire si la ressource incorporée entré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
Noter que nous sommes à l'aide d'un .fichier resx, mais le bug semble toujours se produire.
Mise à jour: Le problème avec les ressources (incl. XAML) semble être lié à la sortie de chemins d'accès et de l'utilisation de l'avant ou vers l'arrière, barres obliques, comme détaillé dans l':
Pourquoi la modification du projet de sortie répertoires cause: IOException était non gérée "Ne peut pas localiser la ressource 'application.xaml'."
J'ai couru dans une autre cause de ce problème, qui n'était pas liée à des fichiers resx. J'ai eu une classe de la bibliothèque où AssemblyInfo.cs contenait les éléments suivants:
L'assemblée ne contiennent pas de code WPF, thème ou dictionnaires de Ressources. Je me suis débarrassé de l'exception en retrait de la ThemeInfo attribut.
Je n'ai pas une exception réelle, seulement
Affichage des détails de l'exception, le système demande la MyAssembly.g.ressources
Espère que cela peut aider quelqu'un d'autre.
Pas sûr que ça va aider les gens mais celui-ci a fonctionné pour moi :
De sorte que le problème que j'ai eu était que je recevais le message suivant:
J'ai essayé d'obtenir les ressources qui ont été incorporés dans mon projet à partir d'une autre bibliothèque de classe.
Ce que j'ai fait pour résoudre le problème est de définir le Modificateur d'Accès dans l'onglet Projet->Propriétés->les Ressources de "Interne" (accessible uniquement au sein de la même bibliothèque de classe) au "Public" (accessible à partir d'une autre bibliothèque de classe)
Puis exécuter et voilà, plus aucune erreur pour moi...
La solution donnée par BlaM a fonctionné pour moi aussi.
Je suis un VS 2013 de l'Utilisateur. Après avoir traversé de nombreux bugs mais pas de chance, j'ai essayé ceci:
Que c'est! 🙂
J'ai eu le même problème, mais dans mon cas, je place une classe dans un usercontrol qui est lié à l'objet usercontrol comme ce
La solution était de déplacer le
MyUserControlObject
à la fin de la classe Usercontrol, à l'instar de ceJ'espère que cette aide
J'ai fait le MissingManifestResourceException erreur après j'ai porté à mon projet de VS2005 pour VS2010. Je n'ai pas d'autres classes définies dans le fichier qui contient mon Formulaire de classe. Et j'ai aussi eu mon resx Ressource de Nom de Fichier défini correctement. N'a pas fonctionné.
Alors j'ai supprimé les fichiers resx et régénérés. Tout est bien maintenant.
Récemment rencontré le même problème, a lutté pour un peu, trouvé à ce sujet, mais aucune réponse n'était correct pour moi.
Mon problème est que quand j'ai enlevé la fenêtre principale de mon projet WPF (elle n'a pas une fenêtre principale), j'ai oublié de supprimer
StartupUri
deApp.xaml
. Je suppose que cette exception peut se produire si vous avez une erreur dansStartupUri
, donc au cas où, si quelqu'un aux prises avec cette - vérifiez votreStartupUri
dansApp.xaml
.Récemment tombé sur ce problème, dans mon cas, je n'ai que peu de choses:
Assurez-vous que les espaces de noms sont cohérents dans le Concepteur.cs de fichier du fichier resx
Assurez-vous que l'espace de noms par défaut de l'Assemblée(clic droit sur le projet et sélectionnez Propriétés) est définie de la même de l'espace de noms les ressources de fichier est en.
Une fois j'ai fait l'étape 2, l'exception s'en alla.
Parce que je suis pré-compiler mon application web (à l'aide de VS2012 fonctionnalité de publication). J'ai été d'obtenir l'erreur ci-dessus. J'ai essayé toutes les suggestions, mais bizarrement un changement de 'Construire l'Action' à 'Contenu' a fait le tour!
Dans mon cas, j'ai une api web avec des ressources et je créer un package nuget à partir de cela. Lorsque j'utilise ce nuget dans d'autres projets, je me rends compte que lorsque je demande un api avec des ressources, je suis
MissingManifestResourceException
après un peu de recherche, j'apprends nuget emballeur n'est pas l'emballage ressources automatiquement. Si vous souhaitez utiliser des fichiers de ressources, vous devez le faire manuellement. Si vous avez besoin d'ajouter ci-dessous les lignes de votre .fichier nuspec:(Visite https://github.com/NuGet/Home/issues/1482)
Mais, avant d'ajouter des fichiers, vous devez être sûr de la version de .net vous utilisez.
J'ai eu le avec un nouveau projet F#.
La solution a été de décocher la case "Utiliser les noms de ressource" dans les propriétés du projet -> Application -> les Ressources et de Spécifier comment les ressources de l'application de gestion.
Si vous ne voyez pas la case, puis mise à jour de Visual Studio! J'ai l'article 15.6.7 installé. Dans 15.3.2 cette case à cocher n'est pas là.
J'ai eu ce problème quand j'ai ajouté une autre classe dans le fichier juste avant la classe qui dérive de la Forme. Ajouter après avoir résolu le problème.
Juste de mentionner. Si vous utilisez une constante ou littéral, assurez-vous qu'il se réfère à une ressource de la forme
ProjectName.Resources
, et ne pas cpntainResources.resx
.Il pourrait vous faire économiser une heure ou deux .
De la page d'assistance Microsoft:
Pour contourner ce problème, spécifiez le nom de fichier de l' .les ressources de fichier lors de l'exécution Resgen.exe. Lorsque vous spécifiez le nom de fichier de l' .ressources de fichier, assurez-vous que le nom de fichier commence par le nom d'espace de noms de votre application. Par exemple, exécutez la commande suivante à l'aide de Microsoft Visual Studio .NET invite de commande pour créer un .les ressources de fichier qui porte le nom d'espace de noms de votre application au début du nom de fichier: