13

Tengo un proyecto web ejecutándose en VS 2008. Tenemos algunos archivos de recursos globales (* .resx) en la carpeta App_GlobalResources para la internacionalización. Todo esto funciona como un encanto en mi instalación IIS local de VS.Los recursos globales no se pueden resolver después de publicar el sitio web en VS2008

Pero cuando publico mi proyecto web en el sistema de archivos local y/u otro servidor, ya no se pueden encontrar todos los recursos. Así que supongo que la precompilación de alguna manera es corruptora. Cuando llamo a la web precompilada, aparece un error que indica que el objeto de recurso con la clave xyz no se puede encontrar, aunque podría encontrarse antes.

Comprobé con el reflector .NET si el material de recursos ingresó en * .dlls. Todos esos identificadores están allí (bin/Web.dll, bin/<culture> /Web.resources.dll). Los identificadores se cargan así:

<asp:MenuItem NavigateUrl="~/OrderNew.aspx" Text="<%$ Resources:MyProject, MenuNewOrder %>" Value="NewOrder"> 

Los archivos de recursos se llaman MyProject.resx y MyProject. <cultura> .resx donde <cultura> corresponde a la cultura específica (es decir, MyProject.de-DE.resx).

¿Alguna idea de cómo solucionar esto?

Realmente agradezco cualquier ayuda.

Gracias

Editar:

Si copio la carpeta App_GlobalResources manualmente a la salida, los recursos se pueden cargar normalmente. Entonces realmente me pregunto de qué se trata esta precompilación.

Todavía estoy interesado en resolver el problema "de la manera correcta".

+0

Tuya es la solución a la que finalmente recurrí; parece que tenemos que usar la acción de compilación "recurso incrustado" para acceder a recursos de código subyacente, pero los propios archivos en/app_globalresources para acceder a ellos utilizando <% $ Recursos: Clase, ResKey%>. Parece que debería haber una mejor manera. – Ripside

Respuesta

12

Tuve el mismo problema y tuve que hacer dos cambios en las propiedades del archivo resx.

  1. Establecer la "Acción de generación" de contenido
  2. Ajuste el "Copiar a directorio de salida" para copiar siempre
+2

Esto resuelve el problema de copiar las cosas manualmente, aunque Copiar si es más reciente es suficiente para mí. – Scoregraphic

2

(que no puedo comentar sobre la respuesta anterior ... sin embargo la reputación ...?)

Esto no solucionó mi problema, me temo.

Al probar la solución "Contenido/Copiar siempre" recibo una excepción que dice que el enlace en tiempo de compilación no funcionó.

¿Por qué asp.net necesita el archivo resx cuando se compilan los recursos?

+0

Aunque no tenga reputación, siempre puede comentar bajo su pregunta –

1

Tuve este error al copiar un archivo de recursos de otro proyecto.

Lo resolví eliminando el recurso global, agregando un nuevo recurso y copiando los elementos data del antiguo al nuevo XML.

Esto se traduce en los siguientes valores para el recurso:

<ItemGroup> 
    <Content Include="App_GlobalResources\Global.resx"> 
     <Generator>GlobalResourceProxyGenerator</Generator> 
     <LastGenOutput>Global.Designer.cs</LastGenOutput> 
    </Content> 
    </ItemGroup> 
+0

Santa mierda, gracias. Desearía poder votar esto más de una vez. – EKW

0

que tenían el mismo problema. Cada vez que publiqué mi aplicación en Small Business Server (SBS2008) se bloqueó en la línea de nombre de control pero, de hecho, en meta: resourcekey. No de la solución mencionada anteriormente me ayudó.

Pasé 6 horas entendiendo esto, finalmente me di cuenta de que esto sucedió cuando hice una limpieza de carpeta en el servidor. Al principio, todas mis aplicaciones estaban ubicadas en E: en sus carpetas, pero luego creé carpetas con nombres que indicaban a las aplicaciones ApplicationPools y moví las aplicaciones correspondientes allí.

No sé cómo IIS7 en mi SBS buscando archivos de recursos, pero definitivamente este era el problema. Cuando vuelvo con mis aplicaciones a E: una vez más todo comenzó a funcionar como un encanto.

Cuestiones relacionadas