12

Microsoft Visual Studio utiliza XML para guardar sus archivos de proyecto .vcproj. Los archivos de proyecto XML tan diferentes deberían ser fácilmente.Sugerencias para mantener archivos de proyecto Visual Studio vcproj en el control de versión

Desafortunadamente, si cambia alguna de las propiedades del archivo de proyecto, Visual Studio insiste en mezclar aleatoriamente los nodos XML del archivo de proyecto. Esto hace que la diferencia textual y la fusión de los cambios en el archivo del proyecto sean básicamente imposibles. ¡Cambiar la configuración de un compilador puede hacer que mi herramienta visual diff piense que he cambiado el 50% de las líneas en el archivo! Incluso he probado algunas herramientas XML diff, pero solo muestran una vista más estructurada del mismo desastre.

¿Alguien tiene alguna sugerencia para mantener los archivos .vcproj en el control de código fuente? O una forma de convencer a Visual Studio para que no reordene los nodos XML en el archivo .vcproj?

(También he investigado el uso de herramientas como CMake para generar .vcproj archivos desde un archivo de texto más diff-amigable, pero CMake tiene sus propios problemas.)

Respuesta

5

Esto parece surgir de vez en cuando.

Tal vez es un problema maduro para un plug-in u otra herramienta de normalización.

Sería un gran negocio secundario, hasta que MS decida arreglarlo. Entonces no tiene suerte, a menos que ofrezcan comprar su IP.

¿Alguien quiere comenzar un proyecto de código abierto o un producto comercial? Estoy juego.

Podría utilizar una herramienta de normalización independiente, y luego ver si puedo convertirlo en un complemento.

+1

Supongo que sería fácil escribir una secuencia corta de Python para alfabetizar los archivos .vcproj Nodos XML. Veo que WinMerge tiene complementos para diferenciar XML; tal vez alguien debería escribir el plugin WinMerge "alfabético vcproj"? Quizás lo haga. :) –

2

uso WinMerge como mi diff-herramienta y que permitió a los detección de bloque movido No soluciona el problema, pero hace que las diferencias sean un poco más soportables.

0

¿En qué versión de Visual Studio está viendo esto?

Trabajo mucho con archivos .vcproj (mantenemos versiones de los archivos de proyecto para nuestras bibliotecas en múltiples versiones de Visual Studio, y siempre estoy difuminando y fusionando las cosas) pero nunca he visto este comportamiento .

+0

VS2008, pero he oído que VS2005 tiene el mismo problema. El "vcproj shuffle" ocurre aleatoriamente. Mis proyectos tienen algunas subcarpetas (Encabezados y Fuentes). Al navegar por ellos, VS ocasionalmente reordenará los proyectos en la GUI, clasificándolos aleatoriamente o alfabéticamente. Eso podría estar relacionado. –

+0

Gracias. Ciertamente estaré atento a esto, y si aprendo algo que pueda ayudar, lo publicaré aquí. –

0

Mi equipo en Adobe ha visto lo mismo en el vs2008. Solo un proyecto básico de depuración/liberación, win32/win64 le ofrece 4 configuraciones y mezcla aleatoria. Varias personas han intentado descifrar cuándo y por qué devstudio reordena, pero el pensamiento actual es que la clave de clasificación es una palabra clave hash, por lo tanto, semi-aleatoria. Nos hemos rendido y en las revisiones de los códigos solo resumimos los cambios "reales".

+1

¿Por qué no crear un XSLT que reordena el archivo .vcproj de acuerdo con alguna secuencia estándar. Haga eso para los dos archivos que está comparando por adelantado, y estará comparando manzanas con manzanas. He hecho esto con los archivos .dtsx de SSIS, que cambian si los miras por mucho tiempo. –

4

Estamos viendo esto aquí en el trabajo ahora, con archivos de proyecto donde las configuraciones se reordenan en computadoras de varias personas, y es muy frustrante ...

* Nota: Todos usamos VS 2008 Pro, no Equipo

Al principio parece que se reordenan aleatoriamente, pero no es en realidad un patrón dey no es al azar en absoluto .

Para un grupo las configuraciones están clasificadas por la plataforma, y ​​luego por Config:

  • depuración | Win32
  • depuración | x64
  • Lanzamiento | Win32
  • Lanzamiento | x64
  • Depurar DX11 | Win32
  • depuración DX11 | x64
  • lanzamiento DX11 | Win32
  • lanzamiento DX11 | x64
  • ...

Por el otro grupo las configuraciones están clasificadas por Config, luego por Plataforma:

  • depuración | Win32
  • lanzamiento | Win32
  • depuración DX11 | Win32
  • lanzamiento DX11 | Win32
  • depuración | x64
  • Lanzamiento | x64
  • depuración DX11 | x64
  • lanzamiento DX11 | x64
  • ...

Mirando a través de la historia de fuerza, esto es consistente con múltiples proyectos presentados por los mismos grupos de personas, y hay una división de 50/50, por lo que no es solo para una persona.

¿Es este el mismo problema que todos ustedes están viendo? Si es así, espero que este patrón ayude a encontrar una solución que no implique un paso macro/extra diff ...

Tiene que ser un ajuste en algún lugar, o un efecto secundario de hacer clic en algo, ya que es 100% reproducible por cada una de estas máquinas. Incluso si es algo tonto como la opción que elija para su diseño de entorno inicial (VC++, VB, Desarrollo general, etc.)

0

Creo que he encontrado el motivo de este cambio de orden. Al menos en VS2008.

Si instala los compiladores de 64 bits, VS ordenará proyectos como:

Debug|Win32 
Debug|x64 
Release|Win32 
Release|x64 

Si no se va a pedir ellos como:

Debug|Win32 
Release|Win32 
Debug|x64 
Release|x64 

Así que asegúrese de que todos sus compañeros tienen la mismo compilador instalado, por lo que no se mezclará.

Lo probó y este comportamiento parece ser reproducible.

Cuestiones relacionadas