Un moteur de diff / fusion de texte décent pour .NET? [fermé]


108

Exigences:

  • gratuit, de préférence open-source
  • implémenté dans l'un des langages gérés .NET

Google a trouvé ceux-ci:

ÉDITER:

Pas d'applications s'il vous plaît, seulement des bibliothèques.


5
Ce fil de discussion n'a pas fait l'objet d'un trafficking depuis un certain temps, mais avec quel projet de différence open source avez-vous fini? Je cherche la même chose et à part les bibliothèques listées je n'ai pas trouvé grand chose (déçu que si peu de choses aient changé en 2 ans ...).
marr75

1
marr75: voilà [Crédit à Cheeso / Brian (voir les réponses ci-dessous)]: "Le code Google Diff / Patch / Merge a été porté en C #. Le composant COM fonctionne toujours, mais si vous venez de .NET, vous Je veux utiliser le port .NET directement. "
Dave

1
Je conviens que cette réponse a été très utile, elle demande un moteur ou un algorithme pour un problème de programmation très spécifique, et je l'ai proposé pour sa réouverture.
Mladen Mihajlovic

Réponses:


88

Vous pouvez récupérer le composant COM qui utilise le Diff / Patch / Match de Google . Cela fonctionne à partir de .NET.

Mise à jour, 17 octobre 2010 : le code Google Diff / Patch / Merge a été porté en C #. Le composant COM fonctionne toujours, mais si vous venez de .NET, vous voudrez utiliser le port .NET directement.


14
On dirait que cela a été porté en C # (implémentation C # entièrement gérée). La version C # est disponible dans la section téléchargement de la page Google. Vous pouvez modifier le bit "COM" de votre réponse. Belle trouvaille car cette implémentation (au moins les versions python / js) sont utilisées dans certains projets largement utilisés tels que Google Docs.
Brian Low

Brian, merci. J'ai mis à jour la réponse.
Cheeso

6
Réponse très utile en 2015. Veuillez ne pas supprimer, le site serait plus utile si ce type de chose était permis (lire: un autre site le permettra, et plus, et se lève et transforme SO en experts-échange si des questions utiles comme celle-ci continuer à se fermer pour des raisons basées sur l'hypothèse erronée dans la FAQ SO).
FastAl

1
Je recommande DiffPlex . C'est netstandard1.0un poids très léger. Vous pouvez facilement l'intégrer dans votre application WPF en utilisant RichTextBoxce qui suit
halllo

1
Un port plus centré sur C # (nommage, boîtier, etc.) se trouve sur: github.com/pocketberserker/Diff.Match.Patch avec support nuget:Install-Package Diff.Match.Patch
Kirk Woll

21

Je pense que le "Generic - Reusable Diff Algorithm in C #" sur Codeproject est le meilleur que vous puissiez trouver en tant que .NET-Engine pour diff / patch / merge. J'ai réalisé mon propre projet avec lui et il répond à mes besoins avec la plupart des scénarios. Il y a un ou deux scénarios du pire des cas lorsque l'algorithme a rendu le fichier de correctif plus volumineux que nécessaire. Mais dans la plupart des cas, cela fonctionne très bien pour moi (fichiers texte d'une taille> 30 Mo).

Je teste actuellement un autre projet Codeproject que vous pouvez trouver ici: http://www.codeproject.com/KB/applications/patch.aspx Il utilise des DLL de Microsoft pour le correctif, donc cela semble intéressant. Mais ces DLL ne sont pas gérées et ce projet n'est qu'une sorte de wrapper pour cela. Mais peut-être que ça peut t'aider

Edit: Je viens de trouver un autre projet, DiffPlex : http://diffplex.codeplex.com/ C'est une combinaison d'une bibliothèque différentielle .NET avec un visualiseur de différences Silverlight et HTML . Comme indiqué ici , DiffPlex est la bibliothèque que CodePlex exploite pour générer les différences de fichiers.


Merci pour l'information! mais j'espère trouver une solution plus sophistiquée. Je ne peux pas croire que personne n'ait créé une librairie soignée
aku

1
Lorsque vous trouvez une meilleure bibliothèque, dites-nous s'il vous plaît (ou au moins moi g ) - Je me suis cherché un bon moment et je n'ai rien trouvé à côté de ce qui a déjà été mentionné.
Anheledir le

1
Diffplex a déménagé sur github.com/mmanela/diffplex
codingdave


5

Aucune des réponses à ce jour (sauf peut-être la référence GitSharp) ne traite de la fusion à 3 voies, donc au cas où cela aiderait quelqu'un, j'ai récemment porté l'implémentation javascript diff3 de Tony Garnock-Jones (du projet synchrotron , basé sur Hunt et McIlroy 1976) en C #.

C'est un port simpliste à fichier unique de méthodes de fusion différentielle et à trois voies, mais c'est l'algorithme standard et jusqu'à présent fonctionne très bien pour moi: https://gist.github.com/2633407


Je ne peux pas résoudre le lien gist.github - je me demande si la méthode de fusion à trois voies pourrait être intégrée dans un outil comme celui-ci et si elle renvoie des résultats différents ou est en fait identique à l' algorithme Myers Diff qui est déjà implémenté?
user8276908
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.