¿Algún motor de fusión / diferenciación de texto decente para .NET? [cerrado]

108

Requisitos:

  • gratis, preferiblemente de código abierto
  • implementado en uno de los idiomas administrados por .NET

Google encontró estos:

EDITAR:

Sin aplicaciones, solo bibliotecas.

aku
fuente
5
Este hilo no se ha traficado en un tiempo, pero ¿con qué proyecto de diferencia de código abierto terminaste? Estoy buscando lo mismo y, además de las bibliotecas enumeradas, no he encontrado mucho (decepcionado de que haya cambiado tan poco en 2 años ...).
marr75
1
marr75: aquí tiene [Crédito a Cheeso / Brian (vea las respuestas a continuación)]: "El código Google Diff / Patch / Merge se ha trasladado a C #. El componente COM aún funciona, pero si viene de .NET, quiero usar el puerto .NET directamente ".
Dave
1
Estoy de acuerdo en que esta respuesta fue muy útil, está solicitando un motor o algoritmo para un problema de programación muy específico, y lo nominé para reabrir.
Mladen Mihajlovic

Respuestas:

88

Puede tomar el componente COM que usa Diff / Patch / Match de Google . Funciona desde .NET.

Actualización, 17 de octubre de 2010 : el código Google Diff / Patch / Merge se ha trasladado a C #. El componente COM todavía funciona, pero si viene de .NET, querrá usar el puerto .NET directamente.

Cheeso
fuente
14
Parece que esto se ha trasladado a C # (implementación de C # administrada por completo). La versión C # está disponible en la sección de descargas de la página de Google. Puede editar el bit "COM" de su respuesta. Buen hallazgo ya que esta implementación (al menos las versiones de python / js) se utilizan en algunos proyectos ampliamente utilizados como Google Docs.
Brian Low
Brian, gracias. Actualicé la respuesta.
Cheeso
6
Respuesta muy útil en 2015. No elimine, el sitio sería más útil si se permitiera este tipo de cosas (lea: otro sitio permitirá esto, y más, y se levantará y convertirá a SO en intercambio de expertos si preguntas útiles como esta seguir cerrándose por razones basadas en la hipótesis errónea en las preguntas frecuentes de SO).
FastAl
1
Recomiendo DiffPlex . Es netstandard1.0y muy ligero. Puede incrustarlo fácilmente en su aplicación WPF usando el RichTextBoxsiguiente: github.com/halllo/WpfDiff
halllo
1
Un puerto más centrado en C # (naming, case, etc.) está en: github.com/pocketberserker/Diff.Match.Patch con soporte nuget:Install-Package Diff.Match.Patch
Kirk Woll
21

Creo que el "Algoritmo de diferencia genérico y reutilizable en C #" en Codeproject es el mejor que puede encontrar como motor .NET para diff / patch / merge. Hice un proyecto por mi cuenta con él y se adapta a mis necesidades con la mayoría de los escenarios. Hay uno o dos escenarios en el peor de los casos cuando el algoritmo hizo que el archivo de parche fuera más grande de lo necesario. Pero en la mayoría de los casos funciona bien para mí (archivos de texto con un tamaño de> 30 MB).

Actualmente estoy probando otro Codeproject-Project que puede encontrar aquí: http://www.codeproject.com/KB/applications/patch.aspx Está usando algunas DLL de Microsoft para parchear, por lo que parece interesante. Pero esas DLL no están administradas y este proyecto es solo una especie de contenedor para él. Pero tal vez te pueda ayudar

Editar: Acabo de encontrar otro proyecto, DiffPlex : http://diffplex.codeplex.com/ Es una combinación de una biblioteca de diferenciación de .NET con un visor de diferencias de Silverlight y HTML . Como se indica allí , DiffPlex es la biblioteca que CodePlex aprovecha para generar las diferencias de archivos.

Anheledir
fuente
¡Gracias por la información! pero espero encontrar una solución más sofisticada. No puedo creer que nadie haya creado una biblioteca ordenada
aku
1
Cuando encuentre una biblioteca mejor, por favor díganos (o al menos a mí g ) - Busqué bastante tiempo y no encontré nada además de lo ya mencionado.
Anheledir
1
Diffplex se ha trasladado a github.com/mmanela/diffplex
codingdave
5

Ninguna de las respuestas hasta ahora (excepto posiblemente la referencia de GitSharp) se ocupa de la fusión de 3 vías, por lo que, en caso de que ayude a alguien, recientemente porté la implementación de javascript diff3 de Tony Garnock-Jones (del proyecto synchrotron , basado en Hunt y McIlroy 1976) a C #.

Es un puerto simplista de un solo archivo de métodos de combinación de tres vías y diferencias, pero es el algoritmo estándar y hasta ahora funciona muy bien para mí: https://gist.github.com/2633407

Tao
fuente
No puedo resolver el enlace gist.github; me pregunto si el método de combinación de tres vías podría integrarse en una herramienta como esta y si devuelve resultados diferentes o si de hecho es el mismo que el algoritmo Myers Diff que ya está implementado.
user8276908