Irgendeine anständige Textdiff / Merge-Engine für .NET? [geschlossen]

108

Bedarf:

  • kostenlos, vorzugsweise Open Source
  • implementiert in einem der .NET verwalteten langs

Google hat diese gefunden:

BEARBEITEN:

Bitte keine Apps, nur Bibliotheken.

aku
quelle
5
Dieser Thread wurde seit einiger Zeit nicht mehr gehandelt, aber mit welchem ​​Open Source Diff-Projekt haben Sie sich am Ende befasst? Ich suche das gleiche und außer den aufgelisteten Bibliotheken habe ich nicht viel gefunden (enttäuscht, dass sich in 2 Jahren so wenig geändert hat ...).
März 75
1
marr75: Los geht's [Gutschrift an Cheeso / Brian (siehe Antworten unten)]: "Der Google Diff / Patch / Merge-Code wurde auf C # portiert. Die COM-Komponente funktioniert weiterhin, aber wenn Sie aus .NET kommen, sind Sie es Ich möchte den .NET-Port direkt verwenden. "
Dave
1
Ich bin damit einverstanden, dass diese Antwort sehr hilfreich war. Sie fordert eine Engine oder einen Algorithmus für ein ganz bestimmtes Programmierproblem an und ich habe sie für die Wiedereröffnung nominiert.
Mladen Mihajlovic

Antworten:

88

Sie können die COM-Komponente abrufen, die Google Diff / Patch / Match verwendet . Es funktioniert aus .NET.

Update, 17. Oktober 2010 : Der Google Diff / Patch / Merge-Code wurde nach C # portiert. Die COM-Komponente funktioniert weiterhin, aber wenn Sie aus .NET kommen, möchten Sie den .NET-Port direkt verwenden.

Cheeso
quelle
14
Es sieht so aus, als ob dies auf C # portiert wurde (vollständig verwaltete C # -Implementierung). Die C # -Version finden Sie im Download-Bereich auf der Google-Seite. Sie können das "COM" -Bit Ihrer Antwort bearbeiten. Netter Fund, da diese Implementierung (zumindest die Python / JS-Versionen) in einigen weit verbreiteten Projekten wie Google Text & Tabellen verwendet wird.
Brian Low
Brian, danke. Ich habe die Antwort aktualisiert.
Cheeso
6
Sehr nützliche Antwort im Jahr 2015. Bitte nicht löschen, Site wäre nützlicher, wenn diese Art von Dingen erlaubt wäre (lesen Sie: Eine andere Site wird dies und mehr erlauben und sich erheben und SO in Expertenaustausch verwandeln, wenn nützliche Fragen wie diese aus Gründen, die auf der fehlerhaften Hypothese in der SO-FAQ beruhen, immer wieder geschlossen werden.
FastAl
1
Ich empfehle DiffPlex . Es ist netstandard1.0und sehr leicht. Sie können es einfach in Ihre WPF-Anwendung einbetten, indem Sie RichTextBox
Folgendes verwenden
1
Ein C # -zentrierterer Port (Benennung, Gehäuse usw.) befindet sich unter: github.com/pocketberserker/Diff.Match.Patch mit Nuget-Unterstützung:Install-Package Diff.Match.Patch
Kirk Woll
21

Ich denke, der "Generic - Reusable Diff Algorithm in C #" auf Codeproject ist der beste, den Sie als .NET-Engine für diff / patch / merge finden können. Ich habe selbst ein Projekt damit gemacht und es passt zu meinen Bedürfnissen in den meisten Szenarien. Es gibt ein oder zwei Worst-Case-Szenarien, in denen der Algorithmus die Patch-Datei größer gemacht hat, als sie sein muss. Aber in den meisten Fällen funktioniert es gut für mich (Textdateien mit einer Größe von> 30 MB).

Ich teste gerade ein anderes Codeproject-Projekt, das Sie hier finden: http://www.codeproject.com/KB/applications/patch.aspx Es verwendet einige DLLs von Microsoft zum Patchen, daher sieht es interessant aus. Diese DLLs werden jedoch nicht verwaltet, und dieses Projekt ist nur eine Art Wrapper dafür. Aber vielleicht kann es dir helfen

Bearbeiten: Ich habe gerade ein anderes Projekt gefunden, DiffPlex : http://diffplex.codeplex.com/ Es ist eine Kombination einer .NET Diffing Library mit einem Silverlight- und einem HTML Diff-Viewer . Wie bereits erwähnt gibt , ist DiffPlex die Bibliothek , dass CodePlex die Differentiale von Dateien zu erzeugen , nutzt.

Anheledir
quelle
Danke für die Information! aber ich hoffe, eine ausgefeiltere Lösung zu finden. Ich kann einfach nicht glauben, dass niemand eine ordentliche Bibliothek erstellt hat
aku
1
Wenn Sie eine bessere Bibliothek finden, teilen Sie uns dies bitte mit (oder zumindest mir g ). Ich habe mich eine ganze Weile selbst durchsucht und nichts außer den bereits erwähnten gefunden.
Anheledir
1
Diffplex ist zu github.com/mmanela/diffplex
umgezogen
5

Keine der bisherigen Antworten (außer möglicherweise der GitSharp-Referenz) befasst sich mit 3-Wege-Zusammenführung. Falls dies jemandem hilft, habe ich kürzlich die Javascript diff3-Implementierung von Tony Garnock-Jones portiert (aus dem Synchrotron- Projekt, basierend auf Hunt und McIlroy 1976). zu C #.

Es ist ein vereinfachter Single-File-Port mit Diff- und Drei-Wege-Merge-Methoden, aber es ist der Standardalgorithmus und funktioniert bisher sehr gut für mich: https://gist.github.com/2633407

Tao
quelle
Ich kann den Link gist.github nicht auflösen. Ich frage mich, ob die Drei-Wege-Zusammenführungsmethode in ein solches Tool integriert werden kann und ob sie unterschiedliche Ergebnisse liefert oder tatsächlich mit dem bereits implementierten Myers Diff- Algorithmus identisch ist.
user8276908