55 votes

Modification de l'espace de nom et du modificateur d'accès des fichiers de ressources (resx)

Dans mon projet web, j'utilise 4 fichiers de ressources dans mon fichier App_GlobalResources dossier. L'un d'entre eux ( lang.resx ) a été créé avant mon arrivée sur le projet. Il possède le bon espace de nom ( WebApplication.App_GlobalResources ) et le modificateur d'accès : public .

En revanche, les trois autres fichiers de ressources que je viens de créer ont un espace de noms différent ( Resources ) et internal et je ne peux pas le modifier dans le formulaire du fichier de ressources à partir de Visual Studio parce qu'il est désactivé. Si j'essaie de le modifier directement dans le fichier designer.cs, les modifications sont annulées lors de la prochaine sauvegarde du fichier.

Ce n'est pas un bogue critique mais il peut être trompeur pour les autres développeurs du projet de trouver différents espaces de noms et modificateurs d'accès pour les fichiers de ressources qu'ils utiliseront.

79voto

Mark Bonafe Points 169

La réponse rapide est : Il suffit d'ouvrir les propriétés du fichier de ressources et de modifier l'attribut Custom Tool Namespace vers l'espace de nom dont vous avez besoin.
C'est aussi simple que cela.

3 votes

La réponse la plus simple pour VS2012

0 votes

J'avais un fichier .resx dans le répertoire <repo_name>/Properties, et je voulais qu'il soit dans mon espace de nom principal : <repo_name>. Il était mis à jour lors de la sauvegarde avec l'espace de nom de <repo_name>.Properties. Au lieu d'utiliser l'espace de noms <repo_name>.Properties partout, j'ai pu utiliser cette réponse pour que l'espace de noms persiste à <repo_name> merci !

48voto

Dave Van den Eynde Points 8199

Je ne sais pas encore exactement où se situe le problème, mais je peux vous dire que vous pouvez le résoudre en changeant l'outil utilisé pour générer le code.

Quand j'ai essayé de suivre cet article Je suis également tombé sur ce problème. Après avoir téléchargé les fichiers sources comme l'auteur l'a suggéré, j'ai remarqué que le fichier de ressources qui était déjà présent avait la classe suivante dans la propriété "Custom Tool" : "PublicResXFileCodeGenerator". En outre, la propriété "Build Action" était définie sur "Embedded Resource", mais je ne suis pas sûr que cela fasse partie du problème.

Tout nouveau fichier de ressources que je créais utilisait l'outil personnalisé "GlobalResourceProxyGenerator". Après avoir écrasé cet outil avec le "PublicResXFileCodeGenerator" susmentionné, le problème semble avoir été résolu, quel que soit le problème réel.

J'ai également remarqué que le fichier de ressources actuel était au format "2.0", alors que les nouveaux fichiers étaient au format "1.3". Vous pouvez le constater lorsque vous ouvrez le fichier resx à l'aide d'un éditeur XML (ou en utilisant "ouvrir avec" à partir de Visual Studio lui-même).

J'espère que vous pourrez faire en sorte que ça marche comme ça, ce n'est pas idéal cependant. Il est probable que ce soit un problème d'installation avec Visual Studio 2008 et SP1, ou quelque chose comme ça.

Mise à jour :

Cet article de blog peut aussi aider.

0 votes

Article de blog très utile. Merci !

1 votes

Cela se produit également dans VS2010 : copier + coller un fichier resx dans le projet peut être le problème, il définit le fichier .resx à GlobalResourceProxyGenerator si vous faites cela.

11voto

Joost Schepel Points 416

Ou vous pouvez modifier l'attribut CustomTool (testé dans VS2010).

Vous devez simplement ouvrir les propriétés du fichier de ressources et changer le "Custom Tool" de "GlobalResourceProxyGenerator" en "PublicResXFileCodeGenerator". "PublicResXFileCodeGenerator", qui est l'outil par défaut des fichiers de ressources fichiers de ressources locales. Ensuite, vous devez changer le "Build Action" en "Embedded Resource". Vous pouvez également attribuer un espace de nom approprié à l'outil personnalisé comme "Resources" afin d'accéder au fichier correctement, mais ce n'est pas mais ce n'est pas nécessaire...

Source :

0 votes

Faites attention si vous utilisez ASP.NET, car lorsque vous publiez avec "Embedded Resource", cela peut ne pas être publié sur le serveur. L'option "Build Action" en tant que "Content" fonctionne bien.

8voto

psychotik Points 11937

Le resx récupère l'espace de nom en fonction de l'espace de nom spécifié dans la configuration de votre projet Visual Studio. Mettez à jour votre projet pour avoir le bon espace de nom, et le resx devrait en hériter (les nouveaux, c'est sûr, mais je ne sais pas si les existants seront corrigés - ils devraient l'être).

4voto

Luis Filipe Points 3302

Les modificateurs d'accès aux fichiers de ressources se trouvent dans le .csproj ;

En modifiant directement le .csproj devrait permettre de contourner ce problème.

Cherchez le <Generator> et définissez sa valeur conformément aux exemples ci-dessous :

Un fichier de ressources avec internal ressemble à ceci,

<ItemGroup>
 <EmbeddedResource Update="resources.resx">
  <Generator>ResXFileCodeGenerator</Generator>
  <LastGenOutput>resources.Designer.cs</LastGenOutput>
 </EmbeddedResource>
</ItemGroup>

où un fichier de ressources avec public ressemble à ceci.

<ItemGroup>
 <EmbeddedResource Update="resources.resx">
  <Generator>PublicResXFileCodeGenerator</Generator>
  <LastGenOutput>resources.Designer.cs</LastGenOutput>
 </EmbeddedResource>
</ItemGroup>

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