2008-09-26 24 views
97

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

  • libre, preferentemente de código abierto
  • implementadas en uno de .NET administrados langs

Google encuentre este tipo:

EDIT:

no hay aplicaciones por favor, sólo las bibliotecas.

+4

Este hilo no ha sido objeto de trata desde hace tiempo, pero ¿Con qué proyecto de código abierto diff terminaste? Estoy buscando lo mismo y además de las bibliotecas enumeradas, no he encontrado mucho (estoy decepcionado de que haya cambiado tan poco en 2 años ...). – marr75

+1

marr75: aquí tienes [Crédito a Cheeso/Brian (ver respuestas a continuación)]: "El [código Google Diff/Patch/Merge] (http://code.google.com/p/google-diff-match-patch /) ha sido portado a C#. El componente COM todavía funciona, pero si vienes de .NET, querrás usar el puerto .NET directamente ". – Dave

+10

Respuesta muy útil en 2015. No elimine, Site sería más útil si se permitiera este tipo de cosas (léase: otro sitio permitirá esto, y más, y se elevará y convertirá SO en expertos; intercambie preguntas útiles como esto sigue cerrándose por razones basadas en la hipótesis errónea en el SO faq). – FastAl

Respuesta

76

Puede agarrar the COM component that uses Google's Diff/Patch/Match. Funciona desde .NET.

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

+13

Parece que esto se ha portado a C# (implementación de C# completo administrado). La versión de C# está disponible en la sección de descargas en 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. –

+0

Brian, gracias. He actualizado la respuesta. – Cheeso

+4

Respuesta muy útil en 2015. No elimine, Site sería más útil si se permitiera este tipo de cosas (léase: otro sitio permitirá esto, y más, y se levantará y convertirá SO en expertos; intercambie preguntas útiles como esto sigue cerrándose por razones basadas en la hipótesis errónea en el SO faq). – FastAl

20

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 algunos archivos DLL de Microsoft para parchar, 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 a lo mejor le puede ayudar a

Editar: acaba de encontrar otro proyecto, DiffPlex: http://diffplex.codeplex.com/ Es una combinación de un diffing biblioteca .NET tanto con un Silverlight y HTML visor de diferencias. Como se indica there, DiffPlex es la biblioteca que CodePlex aprovecha para generar los archivos diffs.

+0

gracias por la información! pero espero encontrar una solución más sofisticada. No puedo creer que nadie haya creado una buena biblioteca. – aku

+1

Cuando encuentre una mejor biblioteca, díganos (o al menos yo * g *) - Me registré bastante tiempo y no encontré nada además de lo ya mencionado. – Anheledir

+0

Diffplex se ha movido a https://github.com/mmanela/diffplex – codingdave

4

Ninguna de las respuestas hasta el momento (excepto posiblemente la referencia de GitSharp) trata con la fusión de 3 vías, por lo que en caso de ayuda a cualquiera. Recientemente porté la implementación javascript diff3 de Tony Garnock-Jones (del proyecto synchrotron, basado en Hunt y McIlroy 1976) a C#.

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

Cuestiones relacionadas