Nous avons des fichiers de ressources générés automatiquement dans notre projet dans Visual Studio 2008, avec quelques versions localisées, et dans l'une de ces versions localisées, il y a une chaîne qui dans ce cas est vide.Ressources dans le fichier de projet dans VS2008 est «réutilisé» de manière créative par le concepteur de formulaire, possible d'éviter?
Plus explicite. Nous avons un fichier de ressources de base, avec beaucoup de ressources de chaîne. Nous avons alors 4 autres versions localisées de ce fichier, et dans l'un de ces autres fichiers localisés, une des chaînes reçoit une valeur vide. Le problème est maintenant que le concepteur de formulaire est assez content d'avoir trouvé une ressource pour une chaîne, et ne s'arrêtera apparemment à rien pour réutiliser cette ressource pour des chaînes vides, il assignera une propriété dans le code du concepteur généré pour un forme. Par exemple, si pour une raison quelconque une propriété sur un contrôle n'est pas spécifiée avec une valeur par défaut (donc elle sera sérialisée au code même si elle est vide), alors elle référencera notre ressource au lieu d'écrire le vide littéral de chaîne dans le code C#.
Le problème est qu'il fait référence aux versions localisées, et celles-ci ne sont pas compilées en code.
Voici un code abrégé exemple:
this.rpAllFields.KeyTip =
global::namespaces.SystemMessagesResources_sv_SE.
dash_red_shift_info_description;
Dans ce cas, l'dash_red_shift_info_description
n'a pas de valeur pour les paramètres régionaux sv-SE, de sorte que le concepteur, quand il voit une chaîne vide dans le code, WILL essayez de lier à cette ressource. Mais le SystemMessagesResources_sv_SE n'est pas une classe existante, mais apparemment un nom de classe généré pour la version localisée suédoise du fichier de ressources SystemMessagesResources, qui est compilé dans une classe.
Est-ce possible d'éviter? Nous sommes un peu fatigués de la recherche/remplacement chaque fois que nous changeons quelque chose dans les fichiers de formulaire, et nous sommes à peu près sûrs qu'il y a une chose que nous avons fait pour que ça arrive, mais nous sommes pas capable de trouver la cause de cela nous-mêmes.
Le code ci-dessus serait, si nous avons supprimé la ressource, lire comme ceci:
this.rpAllFields.KeyTip = "";
Le problème est que vous ne pouvez pas modifier les fichiers de ressources ou les gérer. S'il s'agissait d'une tierce personne ou si vous avez besoin d'une modification non standard pour travailler autour des espaces, vous vous tirerez dans le pied. – Klathzazt