web-dev-qa-db-fra.com

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

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

D'un autre côté, les trois autres fichiers de ressources que je viens de créer ont un espace de noms différent (Resources) et internal modificateur d'accès, et je ne peux pas le modifier sur le formulaire de fichier de ressources de Visual Studio car il est désactivé. Si j'essaye de le changer 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.

51
Michael Pereira

Je ne sais pas encore 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 source comme suggéré par l'auteur, 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" a été définie sur "Embedded Resource", mais je ne sais pas si cela fait partie du problème.

Tout nouveau fichier de ressources que j'ai créé utilisait l'outil personnalisé "GlobalResourceProxyGenerator". Après avoir écrasé cela avec le "PublicResXFileCodeGenerator" susmentionné, il a semblé résoudre le problème, quel que soit le vrai problème.

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 voir lorsque vous ouvrez le fichier resx à l'aide d'un éditeur XML (ou en utilisant "ouvrir avec" de Visual Studio lui-même).

J'espère que vous pourrez le faire fonctionner comme ça, ce n'est pas idéal cependant. Il s'agit probablement d'un problème d'installation avec Visual Studio 2008 et SP1, ou quelque chose comme ça.

Mise à jour:

Cette entrée de blog peut également aider.

44
Dave Van den Eynde

La réponse rapide est: ouvrez simplement les propriétés du fichier de ressources et modifiez le Custom Tool Namespace à l'espace de noms dont vous avez besoin.
Aussi simple que cela.

66
Mark Bonafe

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

Il vous suffit d'ouvrir les propriétés de fichier du fichier de ressources et de changer "l'outil personnalisé" de "GlobalResourceProxyGenerator" en "PublicResXFileCodeGenerator", qui est l'outil par défaut pour les fichiers de ressources locaux. Ensuite, vous devez changer "Build Action" en "Embedded Resource". Vous pouvez également vouloir attribuer un espace de noms d'outil personnalisé approprié comme "Ressources" afin d'accéder correctement au fichier, mais ce n'est pas nécessaire ...

Source

11
Joost Schepel

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

6
psychotik

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

Changer directement le .csproj le fichier devrait contourner ce problème.

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

Un fichier de ressources avec le modificateur internal ressemble à ceci,

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

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

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