Pregunta

¿Cómo puedo comparar el contenido de dos (o más) archivos .resx grandes? Con cientos de pares Nombre / Valor en cada archivo, sería muy útil ver una versión combinada. Estoy especialmente interesado en los pares Nombre / Valor que están presentes en la cultura neutral pero no están especificados en una versión específica de la cultura.

¿Fue útil?

Solución

Hay una gran herramienta gratuita para editar archivos resx donde puedes ver varios idiomas a la vez y ver claramente lo que falta o extra - Editor de recursos Zeta

Otros consejos

Aunque no es una herramienta de diferencias per se, RESX Synchronizer puede ayudarlo aquí. Su uso principal es actualizar los archivos .resx localizados con nuevas entradas del idioma neutral, y eliminar cualquier elemento eliminado.

Posiblemente, el resultado generado al usarlo con el modificador de línea de comandos / v será lo que necesite. De lo contrario, viene con el código fuente completo de C #, por lo que posiblemente pueda adaptarlo a sus necesidades.

Para las versiones más recientes de Visual Studio (2010+) ahora hay una extensión de Visual Studio llamada ResXManager (creado por tomenglert ) que es increíble para esto.

Le permite ver cada recurso en cada idioma en paralelo y resalta los recursos que faltan. (El siguiente ejemplo es de la página de descarga de la extensión.)

 Ejemplo de página de descarga de extensión

El uso de un simple diff en archivos XML puede ser totalmente inútil, si los elementos coincidentes no aparecen en el mismo orden en ambos archivos. También he estado buscando una herramienta de diferencias específica para XML, hasta ahora sin éxito.

Mientras tanto, la solución que he estado usando es la siguiente:

  • Abra los archivos .resx en Visual Studio.
  • Seleccione todo [ Ctrl + A ] y corte [ Ctrl + X ] (esto puede tomar un mientras que para archivos grandes - sea paciente)
  • Pegue [ Ctrl + V ] y guarde (esto volverá a crear los archivos .resx ordenados por claves)

Por lo tanto, cuando ambos archivos se reordenan, la diferencia normal se vuelve mucho más fácil. Puede ubicar rápidamente las claves faltantes hojeando el diff ahora.

He intentado varias herramientas de diferencia xml. Aquí está el resumen (el requisito que me llevó a evaluarlo fue a diferenciar los archivos de recursos .resx generados por Visual Studio, lo que creo que es un error mayor que Microsoft cometió: el orden de los elementos es aleatorio. y Windows Forms siempre vuelve a escribir ImageStream si solo cambia la ubicación de un botón y no hace nada con la lista de imágenes).

  1. XmlDiff
  2. Araxis
  3. Altova DiffDog
  4. Bloc de notas XML
  5. ExamXML
  6. Liquid XML Studio 2009 (hay un menú XML diff, pero solo una versión de licencia puede usarla. Por lo tanto, no tengo oportunidad de probarlo)

En primer lugar, no se deben considerar todas las herramientas de diferencias normales porque no saben nada de XML, tratan los archivos de texto como solo líneas de texto.

  1. XmlDiff es la primera herramienta que probé. Parece que puede querer lo que necesito, pero después de descargar el código fuente ( Visual & nbsp; Studio & nbsp; Studio & nbsp; Studio & nbsp; ; 2003 ) y compilado con Visual & nbsp; Studio & nbsp; 2005 (con una actualización automática exitosa) Puedo compilar el pequeño proyecto sin problemas. Pero cuando comparo dos archivos reales de .resx (1295 líneas) se estrelló. La depuración en el código no me da una pista sobre lo que sucedió porque no tengo ningún código fuente del xmldiffpatch.dll XmlDiffPatch.View.dll .

    Y la razón por la que no intenté profundizar más en esta herramienta fue el formato de salida o el diseño de GUI. Produce un archivo HTML con diferencias resaltadas en una ventana alojada en Internet & nbsp; Explorer. Para una gran diferencia de archivos XML, no es fácil de usar.

  2. El Bloc de notas XML tiene un simple diferencial XML integrado. De acuerdo con la ventana de salida, creo que utiliza internamente el componente de XmlDiff. Y la salida es igual a XmlDiff. Lo desinstalaré.

  3. Araxis es mucho más una herramienta tradicional de diferenciación de texto, también puede comparar archivos binarios, archivos de imágenes, carpetas y archivos de palabras. Me gusta mucho para cualquier tarea de diferencia excepto XML, ya que no tiene soporte para las opciones de diff compatibles con XML.

  4. Altova DiffDog parece un producto comercial complicado, y contuvo una opción para ignorar el orden de los elementos, que es la característica clave para mí.

    Pero después de intentarlo con el mismo archivo .resx real (1295 líneas, no es uno grande en mi experiencia), encontré que el " ignorar el orden de los elementos " simplemente no funciona bien si los dos elementos están ubicados en lugares muy diferentes en los dos archivos.

  5. ExamXML parece un producto comercial, pero es un producto pequeño. Pero después de probarlo, encontré que es la herramienta más ideal en la actualidad para mis expectativas.

También hay un lado decepcionante: se estrelló cuando presioné F10 para navegar a la siguiente diferencia. La opción ignorar orden de elementos funciona bien. Hay un error que la personalización del elemento ignorado no es tan flexible.

label1.Size
label1.Location
label1.Width

Quiero ignorar todas las diferencias en estos elementos cuyo nombre contiene " .Size " o " .Location " o " .Ancho " ;, pero no es posible definir tal condición al mismo tiempo. La personalización no admite expresiones regulares.

De todos modos, usaré ExamXML (con cuidado) para comparar archivos XML.

ACTUALIZACIÓN 1: Pasaron los años, ahora uso VS2017 y winform no cambió desde mi respuesta inicial a esta pregunta. Cuando el trabajo tiene que dividirse en diferentes personas, este problema surgió una y otra vez, aburriéndome.

En realidad olvidé esta respuesta, Google me trajo aquí.

Comencé una nueva sesión de investigación y tengo algunos buenos hallazgos: https://www.codeproject.com/Articles/37022/ Resolviendo el problema de fusión-resuelto muestra que tan fácilmente podemos ordenar el archivo resx por el atributo data / @ name por LINQ. Es asombroso. El código principal es solo una declaración compuesta de varios LINQ.

Luego también encontré que ResXResourceManager, que se señala en otra respuesta en este hilo, el autor respondió al artículo del proyecto de código anterior y agrega la función a ResXResourceManager, en ResxResourceManager, puede configurar el complemento para ordenar automáticamente el resx archivo cuando (antes) lo guarde en la pestaña de configuración. Incluso hay una opción de clasificación que puede elegir: CurrentCulture, Ordinal o IgnoreCase etc.

Desafortunadamente, la solución de código-proyecto y la solución ResXResourceManager producen resultados diferentes, la fuente está disponible, descubrí que la solución de código-proyecto trata la " & amp; gt; & amp; gt; " Valor del atributo como texto normal, por lo que los widgets semánticamente relacionados están separados. Esto se puede solucionar fácilmente agregando un TrimStart ('>') al LINQ.

Sin embargo, después de solucionar este problema, las dos herramientas todavía producen resultados diferentes. El culprint es el LINQ de forma predeterminada que usa CurrentCulture para ordenar la cadena, y ignoro por completo la opción de clasificación revelant en resXResourceManager. Para este problema, creo que la mejor opción de ordenación es " Ordinal " Después de agregar la opción de clasificación a la solución de proyecto de código, y configurar la misma opción de clasificación en ResXResourceManager, ¡finalmente producen exactamente el mismo resultado!

Aunque resxResourceManager es excelente para administrar centralmente el recurso y solucionar el problema del orden de los elementos resx, la herramienta de código-proyecto sigue siendo invaluable para mí, ya que es independiente, por lo que puede usarse en un caso más amplio; Además, el código es muy conciso y elegante.

Agregaría otra nota al final de mi actualización, uso git tortuga, uso Araxis para comparar diferentes versiones, es casi absurdo comparar dos revisiones de archivos resx, sin embargo, el soporte de Araxis para personalizar un filtro para transformar el archivo de entrada antes de que el motor de comparación lo vea. Para comparar, Araxis llama al filtro con el siguiente comando: sortresx.exe -f C: \ Users \ ADMINI ~ 1 \ AppData \ Local \ Temp \ mrg.8032.3.resx C: \ Users \ ADMINI ~ 1 \ AppData \ Local \ Temp \ mrg.8032.2 C: \ Users \ ADMINI ~ 1 \ AppData \ Local \ Temp \ mrg.8032.4

-f significa foward, el primer nombre de archivo es el archivo de entrada, el segundo nombre de archivo es el archivo de salida que el filtro debe escribir, el tercero se puede ignorar de forma segura. Después de hacer un pequeño cambio en el código del proyecto de código, ahora puedo compilar un programa de filtro, configurarlo en Araxis y hacer una comparación de revisión de resx razonable incluso en archivos resx viejos y desordenados.

Podrías codificar algo usando XML Diff. Consulte Uso de la herramienta de diferencias y parches XML en sus aplicaciones .

Puedes usar una herramienta como la de TortoiseSVN (si estás usando Windows). Simplemente seleccione ambos archivos, haga clic con el botón derecho y luego seleccione " diff " desde el submenú TortoiseSVN.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top