2011-10-26 47 views
6

Tengo dos proyectos VS C# (específicamente, para un plugin de Outlook) que creo que es muy muy similar, con la excepción de tal vez 100 líneas de código. Estoy un poco preocupado de que haya otras opciones de configuración para el proyecto que sean diferentes, así que me gustaría comparar esas dos.Comparar (y fusionar) dos proyectos VS C#

¿Cuál es la mejor manera de ver las diferencias entre las dos bases de código?

He intentado poner los dos proyectos en directorios paralelos y usar diff, pero dado que los proyectos tienen nombres diferentes, algunos de los archivos no coinciden. Me pregunto si hay una manera más fácil de hacer esto.

+0

¿Las clases en los archivos fuente 'diferentes' tienen los mismos nombres? Podría intentar construir ambos proyectos y comparar los ensamblados construidos: http://stackoverflow.com/questions/652432/compare-compiled-net-assemblies –

Respuesta

3

Parece que necesita algo como WinMerge para pasar y señalar las diferencias entre los dos proyectos. Es gratis, y sé que puedes comparar los contenidos de las carpetas con WinMerge, por lo que es probable que sea un buen lugar para comenzar. Ejecute WinMerge en las carpetas del proyecto y debería generar una comparación detallada que describa las diferencias entre los archivos.

Ver este tutorial sobre las carpetas que comparan:
http://manual.winmerge.org/CompareDirs.html

enter image description here

+0

Funcionará para archivos renombrados? –

+0

Estoy bastante seguro de que hay formas de dar cuenta de eso. En el peor de los casos, sé que puedes seleccionar archivos específicos para comparar. –

+1

Tratar con archivos renombrados es difícil.Si los archivos han sido renombrados y editados ligeramente, sería difícil que una herramienta de comparación supiera que en realidad eran el mismo archivo en algún momento. Si intentara hacer esto, probablemente le daría muchos falsos positivos donde vería archivos similares de diferentes nombres. Y debería haber algún umbral que solía decidir si dos archivos similares eran lo suficientemente similares o diferentes para tomar esa decisión. – AaronLS

2

Una forma: haga copias de ambos proyectos, cambie el nombre de los archivos y las carpetas en uno para que coincidan con los archivos y carpetas en el otro, luego use su herramienta favorita de comparación de carpetas para comparar los dos.

Esto no lo ayudará a menos que haya una verdadera relación de copiar y pegar entre los dos proyectos.

La mejor manera sería utilizar refactorización. Después de crear pruebas unitarias para ambos proyectos y lograr un nivel adecuado de cobertura de código, vaya a clase por clase y método por método usando la refactorización para tratar de hacer pares de métodos idénticos. A continuación, puede identificar los métodos que deberían extraerse en clases base o trasladarse a otras clases.

Eventualmente, puede encontrar pares de clases que son idénticas. Mueva esas clases a una biblioteca común, luego cambie el nombre de todos los usos de una de las clases para que sea un uso de la otra. Luego borre el que ya no se usa.

Repita hasta que no haya más duplicaciones.

+0

Me gustaría hasta que lleguen 1 más con alguna mejor respuesta –

1

os recomiendo Code Compare (no afiliado, sólo un feliz usuario) para este tipo de trabajo - hay una versión gratuita y una mayor versión comercial avanzada.

Se integra muy bien con VS y tiene resaltado de sintaxis para C#, C/C++, etc.

1

Si usted tiene modificaciones como cambios de nombre o código movimientos parciales, la importación de ambas versiones en un solo git repositorio (como dos diferentes commits de un solo directorio) podría ayudar. Git realiza un seguimiento de los contenidos de los archivos, no de los archivos en sí, por lo que es posible averiguar, p. una función que se ha movido de un archivo a otro.