IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème chargement ressources (après migration 4.0)


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 66
    Points : 34
    Points
    34
    Par défaut Problème chargement ressources (après migration 4.0)
    Bonjour,

    Je rencontre un soucis dans mon application avec le chargement des ressources.
    Celui-ci fonctionnait parfaitement avant que je ne passe en 4.0 (j'ai une appli winform, dans laquelle j'ai mis un peu de WPF donc j'avais besoin du 4.0 pour le datagrid)(j'ai aussi entre temps changé tous mes dossiers de plce sur le DD mais ça n'a guère d'importance je pense).

    La variable RM est mon resourcemanager.
    Je dispose de deux fichiers BP.fr.rsx et BP.en.rsx en resource incorporées.
    BP étant le nom de mon projet.

    CurrentUICulture n'étant pas null ni neutral mais bien {fr-FR}.

    J'utilisais ce code pour le charger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    System.Threading.Thread.CurrentThread.CurrentUICulture = BPM2012.Properties.Settings.Default.paramCurrentUICulture;
                    Assembly ay = System.Reflection.Assembly.GetExecutingAssembly();
     
                    RM = new System.Resources.ResourceManager("BP.BP", System.Reflection.Assembly.GetExecutingAssembly());
    L'assembly renvoyé par GetExecutingAssembly a une culture neutre.

    Et donc dés que je veux me servir de RM j'obtiens :
    {"Impossible de trouver des ressources appropriées pour la culture spécifiée ou la culture neutre. Assurez-vous que \"BP.BP.resources\" a été correctement incorporé ou lié dans l'assembly \"BP\" au moment de la compilation ou que tous les asces.MissingManifestResourceException: semblys satellites requis sont chargeables et complètement signés.
    à System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(String fileName)
    à System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark)
    à System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark)
    à System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
    à System.Resources.ResourceManager.GetString(String name, CultureInfo culture)
    à System.Resources.ResourceManager.GetString(String name)
    }
    Voilà, je suis un peu dans une impasse si vous pouviez m'aider...

    Merci d'avance,

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par PigKey6 Voir le message
    Je dispose de deux fichiers BP.fr.rsx et BP.en.rsx en resource incorporées.
    Et pas de BP.resx ? Normalement on crée toujours un fichier pour la culture neutre, qui est utilisé quand il n'y a pas de ressources pour la culture demandée.

    D'autre part :
    - à quel endroit appelles-tu GetExecutingAssembly ? est-ce que c'est dans le même projet, ou dans un autre projet de la solution ?
    - pourquoi tu n'utilises pas la classe générée automatiquement par Visual Studio pour le fichier de ressources ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    Merci pour la réponse.


    Il y a en effet quelque chose nommé ressources.rsx dans le dossier propriétés de mon projet. Si je l'ouvre je peux voir 3 images que j'avais mis en resources. Rien de plus. Tout cela fonctionnait avant.


    Si je crée un BP.rsx je met quoi dedans ? En fait au chargement de mon application je récupère la culture, et si la culture est neutre je met français par défaut et seulement ensuite je charge ma variable RM avec le getexecutingassembly (utilisé dans le chargement de ma Form).

    Quelle est cette classe générée automatiquement par VS pour le fichier resources ? Celle qui se crée avec le mode "Design" ?
    Je l'utilisais avant mais j'avais eu un soucis et ça ne fonctionnait plus du coup j'avais changé ma méthode et fait comme ça. Et ça fonctionnait très bien jusqu'à maintenant.

    Merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par PigKey6 Voir le message
    Si je crée un BP.rsx je met quoi dedans ?
    Les textes pour la culture neutre

    Citation Envoyé par PigKey6 Voir le message
    Quelle est cette classe générée automatiquement par VS pour le fichier resources ?
    La même qui est générée pour le Resources.resx, si tu as pas touché aux options par défaut. Il suffit de mettre "ResXFileCodeGenerator" comme custom tool dans les propriétés du fichier, et il génère une classe statique du même nom que le fichier resx, avec une propriété pour chaque texte défini dans le fichier resx

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Cette classe est bien générée pour mes deux fichiers ressources (j'ai essayé d'enlever ResXFileCodeGenerator et de le remettre)

    J'obtiens un fichier BP.fr.designer.rsx (si je l'ouvre j'obtiens un fichier avec une seule ligne avec un carré (caractère spécial) sur la première ligne alors que j'obtiens bien un fichier avec du code pour BP.properties.resources)


    J'ai l'impression que le problème vient que getexecutingassembly me renvoit toujours la culture neutre et donc il cherche BP.resource et non BP.fr.resource (en fait le fichier BP.resource n'est pas dans le meme dossier).

    Pourtant j'ai bien spécifié que la culture courante du thread était fr-FR.


    En fait mes deux fichiers resources sont à la racine du projet et le fichier resource est dans properties. Donc j'imagine que pour les resources il faudrait mettre BP.Properties, sauf qu'ici je cherche à atteindre mes ressources perso donc je met BP.BP (le deuxième étant le nom du fichier).

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par PigKey6 Voir le message
    J'obtiens un fichier BP.fr.designer.rsx (si je l'ouvre j'obtiens un fichier avec une seule ligne avec un carré (caractère spécial) sur la première ligne alors que j'obtiens bien un fichier avec du code pour BP.properties.resources)
    ResXFileCodeGenerator s'utilise seulement sur le fichier de ressources pour la culture neutre (celui que tu n'as pas créé), pas sur les ressources localisées

    Et l'extension de tes fichiers est vraiment "rsx" ou en fait c'est "resx" ? Parce que je suis pas sûr que Visual Studio sache se débrouiller avec des fichiers "rsx"...

    Citation Envoyé par PigKey6 Voir le message
    J'ai l'impression que le problème vient que getexecutingassembly me renvoit toujours la culture neutre
    Ça n'a rien à voir ; GetExecutingAssembly renvoie un assembly, pas une culture. C'est le ResourceManager qui décide ensuite quelle culture utiliser

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    D'accord autant pour moi alors. J'ai bien enlevé ResXFileCodeGenerator. (je viens de voir qu'après avoir ajouté une nouvelle resource il le met par défaut, et il construit un fichier designer avec du code et une méthode statique pour chaque texte du fichier. Alors que là mes deux fichiers ressources ne sont aps comme ça.).

    ça ne change pas grand chose au problème. C'est bien resx l'extension également (le fichier que crée VS quand on fait ajouter une ressource quoi)

    Dois-je déplacer mes ressources ailleurs qu'à la racine ? Que dois-je faire pour que ça fonctionne alors ? Je laisse BP.BP dans le constructeur du resourcemanager ?

    Quelle serait la bonne démarche (quitte à recréer tous mes fichiers, c'est juste une histoire de copier coller pour pas perdre les données)

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par PigKey6 Voir le message
    ça ne change pas grand chose au problème.
    C'est à dire ? Le fichier C# généré est toujours vide ?

    Citation Envoyé par PigKey6 Voir le message
    Dois-je déplacer mes ressources ailleurs qu'à la racine ?
    Non, elles peuvent se trouver n'importe où

    Citation Envoyé par PigKey6 Voir le message
    Que dois-je faire pour que ça fonctionne alors ?
    Pour l'instant je sais pas, vu qu'on a pas encore cerné le problème...

    Citation Envoyé par PigKey6 Voir le message
    Je laisse BP.BP dans le constructeur du resourcemanager ?
    Le nom à utiliser est <NomDuProjet.Repertoire.NomDuFichierResxSansExtension>

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Le repertoire est la racine donc c'est bon je peux laisser BP.BP c'est rassurant puisque ça marchait comme ça avant.

    Quand j'enlève ResXFileCodeGenerator, il ne génère plus de fichier j'ai juste le fichier resx, et si je crée un fichier BP.fr.resx il ne le crée pas non plus (dés que je met une extension de "culture" en fait).

    Donc en clair, j'ai toujours la meme erreur.
    J'ai mon fichier Form1.cs qui se situe dans la racine du projet BP avec les fichiers BP.fr.resx et BP.en.resx et celui ci les appelle via le code posté plus haut avec l'erreur également mentionnée.

    J'ai essayé de mettre BP.Form1 dans le constructeur et d'appeler mes fichiers Form1.fr.resx et Form1.en.resx, il n'y a plus l'erreur mais il n'arrive pas à aller chercher des infos dans le fichier.(dés que je fais un RM.getstring("XXXXXX") j'obtiens une valeur null et si je regarde en débugage la valeur de mon resourceManager j'ai des trucs du genre :
    GenericParameterAttributes = '(Form1.RM.ResourceSetType).GenericParameterAttributes' a levé une exception de type 'System.InvalidOperationException'
    En repassant au meme fonctionnement qu'avant (deux fichiers avec le meme nom que le projet) j'ai aussi essayé d'ajouter un fichier BP.resx, et j'ai le meme problème qu'avec Form1.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Bon, je comprends rien à ton problème... Je t'envoie un exemple de projet bidon qui utilise des ressources pour que tu voies comment on fait
    Fichiers attachés Fichiers attachés

  11. #11
    Nouveau membre du Club
    Inscrit en
    Novembre 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    D'accord merci, en effet c'est plus simple que ma manière de faire.
    Mais du coup j'ai juste une question, comment il sait que l'anglais est associé à la ressources sans extensions ? (Myresources.resx)

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par PigKey6 Voir le message
    Mais du coup j'ai juste une question, comment il sait que l'anglais est associé à la ressources sans extensions ? (Myresources.resx)
    Il ne le sait pas : il cherche une ressource en anglais (MyResources.en.resx), il ne la trouve pas, donc il se rabat sur la culture neutre (MyResources.resx). On utilise presque toujours l'anglais comme langue pour les ressources de la culture neutre, vu que c'est la langue la plus largement comprise...

  13. #13
    Nouveau membre du Club
    Inscrit en
    Novembre 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Merci beaucoup ça fonctionne à un détail prés (qui n'est pas important)

    Si je met une culture en fr-FR, il n'est pas capable de reconnaitre que c'est du français ? Il faut obligatoirement mettre fr, si mon fichier a pour extension fr ?

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par PigKey6 Voir le message
    Si je met une culture en fr-FR, il n'est pas capable de reconnaitre que c'est du français ? Il faut obligatoirement mettre fr, si mon fichier a pour extension fr ?
    Quand la culture est fr-FR, il cherche MyResources.fr-FR.resx (culture spécifique), s'il le trouve pas il cherche MyResources.fr.resx (culture non-spécifique), et s'il trouve toujours pas il cherche MyResources.resx (culture neutre). Donc tu peux tout à fait mettre fr-FR ou fr-BE même si le fichier est pour la culture non-spécifique fr.

    Ce système permet d'avoir des ressources spécifiques par pays (par exemple, des textes communs pour le français en général, mais certains textes spécifiques pour la France ou la Belgique)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème connexion internet après migration vers 14.04
    Par thecrazydonut dans le forum Linux
    Réponses: 10
    Dernier message: 01/10/2014, 23h54
  2. Réponses: 1
    Dernier message: 19/09/2010, 15h01
  3. Problème apres migration SQL SERVER
    Par Elijah37 dans le forum Modélisation
    Réponses: 1
    Dernier message: 04/06/2008, 15h56
  4. [cvs2svn] Problème checkout après migration
    Par jerzy59 dans le forum Subversion
    Réponses: 5
    Dernier message: 07/01/2008, 10h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo