Comment puis-je comparer plusieurs à la fois.fichiers resx?

Comment puis-je comparer le contenu de deux (ou plus) grande .fichiers resx? Avec des centaines de paires nom/valeur dans chaque fichier, il serait très utile de visualiser une version combinée. Je suis particulièrement intéressé par les couples nom/valeur qui sont présents dans la culture neutre, mais qui ne sont pas également spécifiés dans une version spécifique à la culture.

21
demandé sur jalbert 2008-09-26 02:37:48

7 réponses

il y a un outil gratuit pour éditer les fichiers resx où vous pouvez voir plusieurs langues à la fois et voir clairement ce qui manque ou extra - Zeta Éditeur De Ressources

30
répondu David Sette 2012-08-21 16:15:41

bien que ce ne soit pas un outil diff en soi, RESX Synchronizer peut vous aider ici. Son utilisation principale est de mettre à jour la localisée .resx fichiers avec de nouvelles entrées à partir de la langue neutre un, et supprimer tous les éléments supprimés.

peut-être, la sortie générée en l'utilisant avec le commutateur de ligne de commande /v sera ce dont vous avez besoin. Sinon, il est fourni avec le code source C# complet, donc vous pouvez peut-être l'adapter à vos besoins.

7
répondu mdb 2008-10-09 18:20:05

j'ai essayé plusieurs outils de diff XMl. Voici le résumé (l'exigence qui m'a poussé à l'évaluer était de différencier le Studio visuel généré .resx les fichiers de ressources, qui je pense est un gros défaut que Microsoft a fait - l'ordre des éléments est aléatoire, et les formes de Windows toujours réécrire L'ImageStream si vous venez de changer l'emplacement d'un bouton et de ne rien faire avec l'imageList).

  1. XmlDiff
  2. Araxis
  3. Altova DiffDog
  4. XML Notepad
  5. ExamXML
  6. Liquid XML Studio 2009 (il y a un XML menu de diff, mais seulement une version de la licence peut utiliser. Donc je n'ai aucune chance de l'essayer)

tout d'abord, tous les outils normaux de diff ne devraient pas être considérés parce qu'ils ne connaissent rien du XML, ils traitent les fichiers texte comme juste des lignes de texte.

  1. XmlDiff est le premier outil I éprouvé. Il semble qu'il peut ne veux, j'ai besoin, mais après avoir téléchargé le code source (Visual Studio 2003) et compilé avec Visual Studio 2005 (avec une mise à niveau automatique réussie) je peux compiler le petit projet en douceur. Mais quand je compare deux vrais!--1--> fichiers (1295 lignes), il s'est écrasé. Déboguer dans le code ne me donne pas un indice sur ce qui s'est passé parce que je n'ai pas de code source du xmldiffpatch.dll XmlDiffPatch.View.dll.

    et la raison pour laquelle je n'ai pas essayé de creuser plus dans cet outil était le format de sortie, ou GUI design. Il produit un fichier HTML avec des différences surlignées dans une fenêtre hébergée par Internet Explorer. Pour une grande différence de fichier XML, ce n'est pas facile à utiliser.

  2. le bloc-notes XML a un simple diff XML intégré. Selon la fenêtre de sortie, je pense qu'il utilise en interne le composant de XmlDiff. Et la sortie est la même que XmlDiff. Je vais le désinstaller.

  3. Araxis est beaucoup plus un outil traditionnel de différence de texte, il peut également comparer des fichiers binaires, fichier image, dossier et fichiers word. Je l'aime beaucoup pour tout diff tâche sauf XML, parce qu'il n'a pas le support D'options de diff conscient de XML.

  4. Altova DiffDog ressemble à un produit commercial compliqué, et il contient une option pour ignorer l'ordre d'élément, qui est la caractéristique clé pour moi.

    Mais après l'avoir essayé avec le même réel .resx fichier (1295 lignes, n'est pas un grand un seul en mon expérience), je trouve que le "ignorer l'élément de commande" juste ne fonctionne pas bien si les deux éléments sont situés à des endroits très différents dans les deux fichiers.

  5. ExamXML ressemble à un produit commercial, mais c'est un petit produit. Mais après l'avoir essayé, j'ai trouvé que c'est l'outil le plus idéal de mes attentes.

il y a aussi un côté décevant: il s'est écrasé quand j'ai appuyé sur F10 pour naviguer à la différence suivante. ignorer l'ordre des éléments l'option fonctionne bien. Il y a un inconvénient que la personnalisation de l'élément ignoré n'est pas tellement flexible.

label1.Size
label1.Location
label1.Width

je veux ignorer toutes les différences sur ces éléments dont le nom contient ".Taille "ou".Emplacement" ou ".Largeur", mais il n'est pas possible de définir une condition en même temps. La personnalisation ne supporte pas les expressions régulières.

quoi qu'il en soit, J'utiliserai ExamXML (avec soin) pour comparer des fichiers XML.

mise à jour 1: les années ont passé, maintenant j'utilise VS2017 et winform n'a pas changé depuis ma première réponse à cette question. Quand le travail a besoin de se décomposer pour différentes personnes, ce problème a surgi encore et encore, m'ennuyant.

en Fait, j'ai oublié cette réponse, google m'a amené ici.

j'ai commencé une nouvelle session d'enquête, et j'ai de bonnes conclusions: https://www.codeproject.com/Articles/37022/Solving-the-resx-Merge-Problem montre que nous pouvons facilement trier le fichier resx par attribut data/@name par LINQ. C'est incroyable. Le code de base est une seule instruction composée de plusieurs LINQ.

puis J'ai aussi trouvé que ResXResourceManager, qui est souligné par une autre réponse dans ce thread, l'auteur a répondu à l'article ci-dessus du projet de code et ajouter la fonctionnalité à ResXResourceManager, dans ResxResourceManager, vous pouvez configurer le plugin pour trier automatiquement le fichier resx lorsque(avant) vous le sauvegardez dans l'onglet configuration. Il y a même une option de tri que vous pouvez choisir: CurrentCulture, Ordinal ou IgnoreCase etc.

malheureusement la solution code-projet et la solution ResXResourceManager produisent des résultats différents, source est disponible, j'ai découvert que la solution code-projet traite la valeur de l'attribut ">>" comme du texte normal de sorte que les widgets sémantiquement liés sont séparés. Ceci peut être facilement corrigé en ajoutant un TrimStart('>') à la LINQ.

cependant, après avoir fixé ceci, les deux outils produisent encore un résultat différent. La culture est le LINQ par défaut en utilisant la culture actuelle pour trier chaîne, et j'ignore totalement l'option de tri revelant dans resXResourceManager, pour ce problème, je pense que la meilleure option de tri est "Ordinal". Après avoir ajouté l'option sort à la solution de projet de code, et réglé la même option sort dans ResXResourceManager, ils produisent finalement exactement le même résultat!

bien que resxResourceManager soit parfait pour gérer centralement la ressource et corriger la question de l'ordre des éléments resx, l'outil code-projet est encore inestimable pour moi, car il est autonome il peut donc être utilisé dans des cas plus larges; de plus, le code est très terne et élégant.

je voudrais ajouter une autre note à la fin de ma mise à jour, j'utilise tortoise git, J'utilise Araxis pour comparer différentes versions, il est presque insensé de comparer deux révisions de fichier resx, cependant, le support Araxis pour personnaliser un filtre pour transformer le fichier d'entrée avant que le moteur de comparaison le voit. Pour comparer, Araxis appelle le filtre par la commande suivante: 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 signifie foward, le premier nom de fichier est le fichier d'entrée, le deuxième nom de fichier est le fichier de sortie que le filtre devrait écrire, le troisième peut être ignoré en toute sécurité. Après avoir fait un peu de changement au code du projet de code, je peux maintenant compiler un programme de filtre, le configurer dans Araxis, et faire une comparaison de révision de resx raisonnable même sur de vieux, foiré fichiers resx.

5
répondu zhaorufei 2017-12-19 05:04:41

utiliser une simple différence sur les fichiers XML peut être totalement inutile, si les éléments correspondants n'apparaissent pas dans le même ordre dans les deux fichiers. J'ai été à la recherche D'un outil de diff spécifique XML trop, jusqu'ici sans succès.

En attendant, la solution de contournement que j'ai utilisé est:

  • Ouvrir .resx fichiers dans Visual Studio.
  • Sélectionner tout [ Ctrl+ ] et couper [ Ctrl+ X] (cet peut prendre un certain temps pour les gros fichiers - être du patient)
  • Coller [ Ctrl+ V] et l'enregistrer (ce sera re-créer le .resx fichiers triés par touches)

lorsque les deux fichiers sont ainsi réordonnés, la différence normale devient tellement plus facile. Vous pouvez rapidement localiser les clés manquantes en parcourant la diff maintenant.

4
répondu Ishmaeel 2012-06-04 11:03:47

pour les nouvelles versions de Visual Studio (2010+) il y a maintenant une Extension de Visual Studio appelée ResXManager (créé par tomenglert) qui est étonnant pour ce.

il vous permet de voir chaque ressource dans chaque langue côte à côte et met en évidence les ressources manquantes. (L'exemple ci-dessous est tiré de la page de téléchargement de l'extension.)



Example From Extension Download Page

4
répondu EF0 2016-01-26 20:42:55

vous pouvez coder quelque chose en utilisant XML Diff. Voir utilisation de L'outil XML Diff and Patch dans vos Applications.

0
répondu Greg Dean 2012-06-04 11:10:09

vous pouvez utiliser un outil comme diff de TortoiseSVN (si vous utilisez Windows). Il suffit de sélectionner les deux fichiers, clic droit et ensuite sélectionner "diff" à partir du sous-menu TortoiseSVN.

-1
répondu Pablo Fernandez 2017-06-20 21:25:34