¿Algún motor de diferencias / combinación de texto decente para .NET?

Requisitos:

  • gratis, de preferencia de código abierto
  • implementado en uno de los langs administrados .NET

Google encontró esto:

  • Un algoritmo de diff genérico y reutilizable en el proyecto de código
  • Un algoritmo de diferencia de O (ND) para C #
  • Diff / Merge / Patch Library para C # /. NET por Joshua Tauberer

EDITAR:

Sin aplicaciones, solo bibliotecas.

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

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

Creo que el “Genérico – Algoritmo difuso reutilizable en C #” en CodeProject es lo mejor que puedes encontrar como .NET-Engine 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 de peor caso cuando el algoritmo hizo que el archivo de parche fuera más grande de lo que debería ser. 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 proyecto de proyecto de código 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 esos archivos DLL no están administrados y este proyecto es solo una especie de envoltorio para él. Pero tal vez te pueda ayudar

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

GitSharp incluye un motor diff basado en Meyers diff. Eche un vistazo a la demostración que implementa un visor de wpf diff simple basado en la colección Diff.Sections: http://www.eqqon.com/index.php/GitSharp#GitSharp.Demo

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

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