2010-11-09 15 views
12

Tengo una forma bastante simple que quiero localizar (de hecho tengo bastantes en este proyecto, todos tienen el mismo problema). Cuando establezco la propiedad de formulario Localizable en verdadero, Visual Studio genera un archivo .resx con el nombre del formulario (como era de esperar). El problema es que agrega todo tipo de cosas al archivo .resx que nada más puede abrir (por ejemplo, WinRes, ResEx, Simple Resx Editor, RESX Editor, etc.).Visual Studio crea archivos inválidos de Resx

El error que consigo es:

ResX Tipo de archivo System.Drawing.Point, System.Drawing, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a los datos en la línea 125, la posición 4 no puede ser localizado La línea 127, posición 5. no se puede analizar.

la línea 124 a 127 es:

<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
<data name="lblUsername.Location" type="System.Drawing.Point, System.Drawing"> 
    <value>26, 24</value> 
</data> 

Ahora estoy asumiendo que Visual Studio es la adición de este modo que pueda mover los botones, etc alrededor dependiendo de la lengua (no necesitan o desean esta habilidad). Sin embargo, arroja el error anterior en cada editor otro que Visual Studio.

Las únicas extensiones que he instalado (de acuerdo con el administrador de extensiones) son:

  • Resalte todas las apariciones de la palabra seleccionada
  • Microsoft cinta para WPF (que no estoy usando en este proyecto)

Administrador de complementos no muestra complementos.

Editar:

Después de cavar alrededor y editar manualmente el archivo .resx, el problema es en realidad con la línea 124 <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> específicamente con Version=4.0.0.0.

Si configuro esto en Version=2.0.0.0 todo funciona, tanto en Visual Studio como en todos los programas externos. El problema con esto es que si edito algo dentro de Visual Studio, lo restableceré nuevamente al Version=4.0.0.0.

Por el momento, voy a establecer el Marco de destino para .NET Framework 3.5 Client Profile para que Visual Studio no anule la versión. Esta es una solución y significa que no puedo usar las características de .NET 4.0.

Estoy en lo cierto al adivinar que hay un error en el .NET Framework, o en cada uno de los editores .resx (incluidos los de Microsoft).

Edición 2: Resultó que cuando yo estaba tratando de utilizar la herramienta de Microsoft WinRes.exe realidad estaba lanzando la versión de .NET Framework 3.5, ya que la versión de .NET Framework 4.0 no se instala.

Tuve que instalar .NET Framework 4.0 SDK desde http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/winsdk_web.exe y luego pude editar los archivos .resx con WinRes.exe 4.0

+0

¿Hizo usted 'PublicKeyToken = REMOVED' O es que es el mensaje de error exacto? También el dibujo se escribe mal allí. – leppie

+0

Ese soy yo escribiéndolo. Lo editaré y lo volveré a agregar. No supongo que dañará una clave pública. –

+0

@Blair McMillan: No es el tuyo de todos modos :) – leppie

Respuesta

6

Visual Studio crea archivos * .resx correctos. El problema es que las herramientas que está intentando usar se crearon para la versión anterior de la especificación. Es por eso que tu solución funciona.

Compruebe si no hay versiones más recientes o parches para las herramientas de localización que está utilizando.

+0

Es cierto. No puedo encontrar la versión 4.0 de WinRes.exe (herramienta de Microsoft que debe venir con VS). –

+0

WinRes.exe 4.0 está instalado con .NET Framework SDK que se puede descargar de http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/winsdk_web.exe –

3

En .resx, busque la primera línea de la cadena codificada en base64. El final debe ser "j00LjAuMC4w" (es decir, .net 4.0). Intenta cambiar eso a "j0yLjAuMC4w" (es decir, .net 2.0). Trabajó para mi. Gracias a Luis Mack en http://connect.microsoft.com/VisualStudio/feedback/details/532584/error-when-compiling-resx-file-seems-related-to-beta2-bug-5252020#

+0

Esto no es el cambio real que hice, pero me hizo darme cuenta de que el problema era una biblioteca con la versión incorrecta. – DCShannon

3

A veces, en casos específicos, Windows bloquea el diseñador de formularios al validar el formulario con los archivos * .resx.

Los controles donde se adjuntó un DataSource se ven afectados por este comportamiento. En mi caso tengo algunos conjuntos de datos como fuente de datos para Rejas, combos ...

Así que han abierto el diseñador y it't mí no se puede abrir por un problema con un control denominado diciendo: blabla

después de comprobar el archivo de diseñador descubrí que no hay nada mal con el control, es solo el archivo * .resx que apunta a una fuente incorrecta, porque he refactorizado el conjunto de datos. Por lo tanto, * .resx no se ha actualizado debido a esta refactorización.

Abrí el archivo * .resx y simplemente busqué el identificador del control y encontré un código codificado en Base64. Eliminar el valor dentro del bloque sin eliminar las etiquetas de sonido envolvente resolverá el problema de este control ya que el diseñador de formularios de Windows actualizará automáticamente y leerá el contenido faltante en el archivo * .resx.

0

Este error se presenta cuando el compilador perdido la referencia de algún objeto o cuando el que ha cambiado una propiedad importante de este objeto, por ejemplo, si usted tiene una cuadrícula en el formulario toda la disposición (esto significa que está utilizando una DataSet como su fuente de datos para cumplir con su grilla), y usted cambia el nombre de su VS DataSet perdió este enlace, él le traerá este mensaje.

Cuestiones relacionadas