2009-08-26 31 views
39

En mi proyecto web estoy usando 4 archivos de recursos en mi carpeta App_GlobalResources. Uno de ellos (lang.resx) se ha creado antes de mi llegada al proyecto. Tiene el espacio de nombre correcto (WebApplication.App_GlobalResources) y el modificador de acceso: public.Cambiando el espacio de nombres de los archivos de recursos (resx) y el modificador de acceso

Por otra parte, los otros tres archivos de recursos que acaba de crear tiene un espacio de nombres diferente (Resources) y internal modificador de acceso, y no puedo cambiarlo en el Formulario archivo de recursos desde Visual Studio porque es desactivada. Si trato de cambiarlo directamente en el archivo designer.cs, las modificaciones se cancelan en el siguiente guardado del archivo.

No es un error crítico, pero puede ser engañoso para los otros desarrolladores en el proyecto encontrar diferentes espacios de nombres y modificadores de acceso para los archivos de recursos que usarán.

Respuesta

42

No estoy del todo seguro de cuál es el problema, pero puedo decirte que puedes resolverlo cambiando la herramienta utilizada para generar el código.

Cuando traté de seguir this article, también tropecé con este problema. Después de descargar los archivos fuente como sugirió el autor, noté que el archivo de recursos que ya estaba presente tenía la siguiente clase en la propiedad "Herramienta personalizada": "PublicResXFileCodeGenerator". Además, la propiedad "Crear acción" se configuró en "Recurso incrustado", pero no estoy seguro de si eso es parte del problema.

Cualquier archivo de recursos nuevo que creé utilizaba la herramienta personalizada "GlobalResourceProxyGenerator". Después de sobreescribir esto con el ya mencionado "PublicResXFileCodeGenerator" pareció resolver el problema, cualquiera que sea el verdadero problema.

También noté que el archivo de recursos actual estaba en el formato "2.0", mientras que los archivos nuevos estaban en el formato "1.3". Puede ver esto cuando abre el archivo resx usando un editor XML (o usando "abrir con" desde el propio estudio visual).

Espero que pueda hacer que funcione así, aunque no es ideal. Es probable que sea un problema de instalación con Visual Studio 2008 y SP1, o algo así.

Actualización:

This blog entry también puede ayudar.

+0

Entrada de blog muy útil. ¡Gracias! – ongle

+0

Esto también ocurre en VS2010: copiar o pegar un archivo resx en el proyecto puede haber sido el problema, establece el archivo .resx en GlobalResourceProxyGenerator si lo hace. –

6

El resx recoge el espacio de nombres según el espacio de nombres especificado en la configuración del proyecto de Visual Studio. Actualice su proyecto para tener el espacio de nombres correcto, y el resx debería heredarlo (los nuevos seguro, no estoy seguro de si los existentes serán corregidos, deberían).

+0

espacio de nombre de proyecto predeterminado parece bueno: 'WebApplication' –

4

Los modificadores de acceso Archivos de recursos están en .csproj;

Cambiar directamente el archivo .csproj debería solucionar este problema.

Busque el elemento <Generator> y establezca su valor de acuerdo a los siguientes ejemplos:

Un archivo de recursos con internal modificador se parece a esto,

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

en un archivo de recursos con public modificador parece esta.

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

Sería útil si expandió su respuesta, por lo que también dice * dónde * en el '.csproj' se supone que debe verse. Por lo que puedo decir, es simplemente que se usa un generador diferente ('PublicResXFileCodeGenerator' en lugar de' ResXFileCodeGenerator'). Eso también debería poder editarse en la ventana de propiedades de VS para el elemento del proyecto '.resx'. – stakx

+0

gracias @stakx; Agregué ejemplos como se sugiere –

10

O puede cambiar el atributo CustomTool (probado en VS2010).

sólo hay que abrir las propiedades de archivo del archivo de recursos y cambiar el “Custom Tool” de “GlobalResourceProxyGenerator” a “PublicResXFileCodeGenerator”, que es la herramienta predeterminada para archivos locales de recursos. A continuación, debe cambiar la "Acción de compilación" al "Recurso incrustado". También es posible que desea asignar una adecuada herramienta personalizada Espacio de nombres como “Recursos” con el fin de acceder al archivo correctamente, pero esto no es necesario ...

Source

+0

Tenga cuidado de usar ASP.NET, porque al publicar con "Recurso incrustado" esto puede no publicar en el servidor. "Crear acción" como "Contenido" funciona bien aunque –

44

La respuesta rápida es: Simplemente abra las Propiedades del archivo de recursos y cambie el Custom Tool Namespace al espacio de nombres que necesite.
Tan simple como eso.

+3

Respuesta más simple para VS2012 –

Cuestiones relacionadas