24 Stimmen

Wie kann ich mehrere .resx-Dateien vergleichen?

Wie kann ich den Inhalt von zwei (oder mehr) großen .resx-Dateien vergleichen? Bei Hunderten von Name/Wert-Paaren in jeder Datei wäre es sehr hilfreich, eine kombinierte Version zu sehen. Ich interessiere mich besonders für Name/Wert-Paare, die in der neutralen Kultur vorhanden sind, aber nicht auch in einer kulturspezifischen Version angegeben sind.

33voto

Es gibt ein großartiges Freeware-Tool zum Bearbeiten von resx-Dateien, mit dem Sie mehrere Sprachen auf einmal sehen können und deutlich erkennen können, was fehlt oder hinzukommt. Zeta-Ressourcen-Editor

0 Stimmen

Wirklich nett, Sie haben meinen halben Tag gerettet.

8voto

EF0 Punkte 2820

Für neuere Versionen von Visual Studio (2010+) gibt es jetzt eine Visual Studio Extension namens ResXManager (erstellt von tomenglert ), was in dieser Hinsicht erstaunlich ist.

Sie ermöglicht es Ihnen, jede Ressource in jeder Sprache nebeneinander zu sehen und hebt fehlende Ressourcen hervor. (Das folgende Beispiel stammt von der Download-Seite der Erweiterung).

Example From Extension Download Page

7voto

mdb Punkte 50584

Obwohl es sich nicht um ein Diff-Tool an sich handelt, RESX-Synchronisiergerät kann Ihnen hier weiterhelfen. Die Hauptaufgabe besteht darin, die lokalisierten .resx-Dateien mit neuen Einträgen aus der neutralen Sprache zu aktualisieren und gelöschte Einträge zu entfernen.

Möglicherweise ist die Ausgabe, die mit dem Befehlszeilenschalter /v erzeugt wird, das, was Sie brauchen. Andernfalls wird der vollständige C#-Quellcode mitgeliefert, so dass Sie ihn möglicherweise für Ihre Bedürfnisse anpassen können.

1 Stimmen

Der RESX-Synchronizer wird nicht mehr hergestellt, aber es wird empfohlen http://amanuens.com/ die bis zum 31. Dezember 2011 kostenlos zur Verfügung steht und wirklich toll aussieht!

0 Stimmen

Keines dieser Werkzeuge ist jetzt zugänglich

6voto

Ishmaeel Punkte 13903

Ein einfacher Vergleich von XML-Dateien kann völlig nutzlos sein, wenn die übereinstimmenden Elemente nicht in der gleichen Reihenfolge in beiden Dateien vorkommen. Ich habe auch nach einem XML-spezifischen Diff-Tool gesucht, bisher ohne Erfolg.

In der Zwischenzeit habe ich mich folgendermaßen beholfen:

  • Öffnen Sie die .resx Dateien in Visual Studio.
  • Alle auswählen [ Ctrl + A ] und schneiden [ Ctrl + X ] (dies kann bei großen Dateien eine Weile dauern - haben Sie Geduld)
  • Einfügen [ Ctrl + V ] und speichern (dadurch wird die .resx Dateien nach Schlüsseln sortiert)

Wenn beide Dateien auf diese Weise neu geordnet sind, wird das normale Vergleichen sehr viel einfacher. Sie können die fehlenden Schlüssel schnell ausfindig machen, indem Sie die Diff-Datei überfliegen.

5voto

zhaorufei Punkte 1877

Ich habe mehrere XMl-Diff-Tools ausprobiert. Hier ist die Zusammenfassung (die Anforderung, die mich dazu veranlasste, es zu testen, war, die von Visual Studio generierten .resx Ressourcendateien, was meiner Meinung nach ein großer Fehler von Microsoft ist - die Reihenfolge der Elemente ist zufällig, und Windows Forms schreibt den ImageStream immer neu, wenn Sie nur die Position einer Schaltfläche ändern und nichts mit der imageList machen).

  1. XmlDiff
  2. Araxis
  3. Altova DiffDog
  4. XML-Notepad
  5. ExamXML
  6. Liquid XML Studio 2009 (Es gibt ein XML-Diff-Menü, aber nur eine Lizenzversion kann es nutzen. Ich habe also keine Möglichkeit, es auszuprobieren)

Zunächst einmal sollten alle normalen Diff-Tools nicht in Betracht gezogen werden, da sie nichts über XML wissen, sondern Textdateien nur als Textzeilen behandeln.

  1. XmlDiff ist das erste Tool, das ich ausprobiert habe. Es sieht so aus, dass es tun kann, was ich brauche, aber nach dem Herunterladen des Quellcodes ( Visual Studio 2003 ) und kompiliert mit Visual Studio 2005 (mit einem erfolgreichen Auto-Upgrade) kann ich das kleine Projekt reibungslos kompilieren. Aber wenn ich zwei echte Projekte vergleiche .resx Dateien (1295 Zeilen) stürzte er ab. Das Debuggen des Codes gibt mir keinen Aufschluss darüber, was passiert ist, da ich keinen Quellcode der xmldiffpatch.dll XmlDiffPatch.View.dll .

    Der Grund, warum ich mich nicht näher mit diesem Tool befasst habe, war das Ausgabeformat bzw. die Gestaltung der Benutzeroberfläche. Es gibt eine HTML-Datei mit hervorgehobenen Unterschieden in einem vom Internet Explorer gehosteten Fenster aus. Für einen großen XML-Dateidiff ist es nicht einfach zu benutzen.

  2. XML Notepad verfügt über einen einfachen integrierten XML-Diff. Dem Ausgabefenster nach zu urteilen, verwendet es intern die Komponente von XmlDiff. Und die Ausgabe ist die gleiche wie bei XmlDiff. Ich werde es deinstallieren.

  3. Araxis ist viel mehr ein traditionelles Textvergleichswerkzeug, es kann auch Binärdateien, Bilddateien, Ordner und Worddateien vergleichen. Ich mag es sehr für jede diff Aufgabe außer XML, da es keine XML-kompatiblen Diff-Optionen unterstützt.

  4. Altova DiffDog sieht wie ein kompliziertes kommerzielles Produkt aus und enthält eine Option zum Ignorieren der Elementreihenfolge, was für mich die wichtigste Funktion ist.

    Aber nachdem ich es mit denselben echten .resx Datei (1295 Zeilen, meiner Erfahrung nach keine große Datei) habe ich festgestellt, dass die Funktion "Elementreihenfolge ignorieren" nicht gut funktioniert, wenn sich die beiden Elemente an sehr unterschiedlichen Stellen in den beiden Dateien befinden.

  5. ExamXML sieht aus wie ein kommerzielles Produkt, aber es ist ein kleines Produkt. Aber nachdem ich es ausprobiert hatte, stellte ich fest, dass es derzeit das idealste Werkzeug für meine Erwartungen ist.

Es gibt auch eine enttäuschende Seite: Es stürzte ab, als ich auf F10 um zum nächsten Unterschied zu navigieren. Die Reihenfolge der Elemente ignorieren Option funktioniert gut. Es ist schade, dass die Anpassung der ignorierten Element ist nicht so viel flexibel.

label1.Size
label1.Location
label1.Width

Ich möchte alle Unterschiede bei diesen Elementen ignorieren, deren Name ".Size" oder ".Location" oder ".Width" enthält, aber es ist nicht möglich, eine solche Bedingung gleichzeitig zu definieren. Die Anpassung unterstützt keine regulären Ausdrücke.

Wie auch immer, ich werde ExamXML (mit Vorsicht) verwenden, um XML-Dateien zu vergleichen.

UPDATE 1: Jahre vergangen, jetzt benutze ich VS2017 und winform nicht seit meiner ersten Antwort auf diese Frage ändern. Wenn die Arbeit brauchen, um auf verschiedene Menschen zu brechen, dieses Problem tauchte wieder und wieder, langweilig mich.

Eigentlich habe ich diese Antwort vergessen, Google hat mich hierher gebracht.

Ich habe eine neue Untersuchungssitzung begonnen und habe einige gute Ergebnisse erzielt: https://www.codeproject.com/Articles/37022/Solving-the-resx-Merge-Problem zeigt, wie schnell wir die resx-Datei mit LINQ nach dem Attribut data/@name sortieren können. Es ist erstaunlich. Der Kerncode ist nur eine Anweisung, die aus mehreren LINQ.

Dann fand ich auch, dass ResXResourceManager, die durch eine andere Antwort in diesem Thread hingewiesen wird, antwortete der Autor auf die oben genannten Code-Projekt Artikel und fügen Sie die Funktion zu ResXResourceManager, in ResxResourceManager, können Sie das Plugin konfigurieren, um automatisch die resx-Datei sortieren, wenn (vor) Sie es in der Konfiguration Registerkarte speichern. Es gibt sogar eine Sortieroption, die Sie auswählen können: CurrentCulture, Ordinal oder IgnoreCase usw.

Leider liefern die Code-Project-Lösung und die ResXResourceManager-Lösung unterschiedliche Ergebnisse. Ich habe herausgefunden, dass die Code-Project-Lösung den Wert des Attributs ">>" als normalen Text behandelt, so dass semantisch verwandte Widgets getrennt werden. Dies kann leicht behoben werden, indem ein TrimStart('>') in die LINQ.

Nach der Behebung dieses Problems liefern die beiden Tools jedoch immer noch unterschiedliche Ergebnisse. Der culprint ist die LINQ standardmäßig mit CurrentCulture um Zeichenfolge zu sortieren, und ich völlig ignorieren die revelant Sortieroption in resXResourceManager, für dieses Problem, ich denke, die beste Sortieroption ist "Ordinal". Nach dem Hinzufügen der Sortieroption zur Code-Projektlösung und dem Einstellen der gleichen Sortieroption in ResXResourceManager, schließlich produzieren sie genau das gleiche Ergebnis!

Obwohl resxResourceManager großartig ist, um die Ressource zentral zu verwalten und das Problem mit der Reihenfolge der resx-Elemente zu beheben, ist das Code-Projekt-Tool für mich immer noch von unschätzbarem Wert, da es eigenständig ist und somit in einer Vielzahl von Fällen verwendet werden kann; außerdem ist der Code sehr knapp und elegant.

Ich würde eine weitere Anmerkung am Ende meines Updates hinzufügen, ich benutze tortoise git, ich benutze Araxis, um verschiedene Versionen zu vergleichen, es ist fast unsinnig, zwei resx-Dateirevisionen zu vergleichen, jedoch unterstützt Araxis die Anpassung eines Filters, um die Eingabedatei zu transformieren, bevor die Vergleichsmaschine sie sieht. Für den Vergleich ruft Araxis den Filter mit dem folgenden Befehl auf: sortresx.exe -f C:\Users\ADMINI ~1 \AppData\Local\Temp\mrg.8032.3.resx C:\Users\ADMINI ~1 \AppData\Local\Temp\mrg.8032.2 C:\Users\ADMINI ~1 \AppData\Local\Temp\mrg.8032.4

-f bedeutet foward, der erste Dateiname ist die Eingabedatei, der zweite Dateiname ist die Ausgabedatei, die der Filter schreiben soll, die dritte Datei kann getrost ignoriert werden. Nachdem ich eine kleine Änderung am Code-Projekt-Code vorgenommen habe, kann ich jetzt ein Filterprogramm kompilieren, es in Araxis konfigurieren und einen vernünftigen resx-Revisionsvergleich durchführen, selbst bei alten, verpfuschten resx-Dateien.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X