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.
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.
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.
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 ...
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).
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>