Подтвердить что ты не робот

Как я могу сравнить несколько файлов .resx?

Как я могу сравнить содержимое двух (или более) больших файлов .resx? С сотнями пар Name/Value в каждом файле было бы очень полезно просмотреть комбинированную версию. Меня особенно интересуют пары Name/Value, которые присутствуют в нейтральной культуре, но также не указаны в версии для конкретной культуры.

4b9b3361

Ответ 1

Существует отличный бесплатный инструмент для редактирования файлов resx, где вы можете сразу увидеть несколько языков и четко увидеть, что отсутствует или дополнительно - Zeta Resource Editor

Ответ 2

Хотя это не инструмент для разграничения, RESX Synchronizer может помочь вам здесь. Его основное назначение - обновить локализованные .resx файлы новыми записями с нейтрального языка и удалить все удаленные элементы.

Возможно, результат, сгенерированный с помощью его с помощью командной строки /v, будет тем, что вам нужно. В противном случае он поставляется с полным исходным кодом С#, поэтому, возможно, вы сможете адаптировать его для своих нужд.

Ответ 3

Я пробовал несколько инструментов XMl diff. Здесь резюме (требование, которое побудило меня оценить его, было отличать файлы ресурсов .resx, созданные Visual Studio, которые, по моему мнению, являются большой ошибкой, которую сделала Microsoft, - порядок элементов случайный, а Windows Forms - напишите ImageStream, если вы просто измените расположение кнопки и ничего не сделаете с помощью imageList).

Прежде всего, все нормальные инструменты diff не следует рассматривать, потому что они ничего не знают о XML, они обрабатывают текстовые файлы как строки текста.

  • XmlDiff - это первый инструмент, который я пробовал. Похоже, что он может сделать то, что мне нужно, но после загрузки исходного кода (Visual Studio 2003) и скомпилирован с помощью Visual Studio 2005 (с успешным автоматическим обновлением) Я могу скомпилировать небольшой проект плавно. Но когда я сравниваю два реальных файла .resx (1295 строк), он разбился. Отладка в код не дает мне подсказки о том, что произошло, потому что у меня нет исходного кода xmldiffpatch.dll XmlDiffPatch.View.dll.

    И причина в том, что я не пытаюсь копать больше в этот инструмент, был выходной формат или графический интерфейс. Он выводит HTML файл с различиями, выделенными в окне Internet Explorer. Для большого XML файла diff это непросто использовать.

  • XML Notepad имеет простой встроенный XML-diff. Согласно выходному окну, я думаю, что он внутренне использует компонент XmlDiff. Результат такой же, как XmlDiff. Я удалю его.

  • Araxis гораздо более традиционный инструмент для текстового разграничения, он также может сравнивать двоичный файл, файл изображения, папку и файлы слов. Мне это очень нравится для любой задачи diff, кроме XML, потому что она не поддерживает поддержку XML-версий diff.

  • Altova DiffDog выглядит как сложный коммерческий продукт, и в нем есть опция игнорировать порядок элементов, что является ключевой особенностью для меня.

    Но попробовав его с тем же реальным .resx файлом (1295 строк, а не большим в моем опыте), я обнаружил, что "порядок игнорирования элемента" просто не работает, если два элемента расположены очень разные места в двух файлах.

  • ExamXML выглядит как коммерческий продукт, но это небольшой продукт. Но, попробовав это, я нашел его самым идеальным инструментом в настоящее время для моих ожиданий.

Там также была неутешительная сторона: он разбился, когда я нажал F10, чтобы перейти к следующей разнице. Опция игнорирования порядка элементов работает хорошо. Там одна питти, что настройка игнорируемого элемента не так гибкая.

label1.Size
label1.Location
label1.Width

Я хочу игнорировать все различия в этих элементах, чье имя содержит ".Size" или ".Location" или ".Width", но невозможно определить такое условие одновременно. Настройка не поддерживает регулярные выражения.

В любом случае, я буду использовать ExamXML (с осторожностью) для сравнения файлов XML.

ОБНОВЛЕНИЕ 1: лет прошло, теперь я использую VS2017, и winform не изменился с моего первоначального ответа на этот вопрос. Когда работа должна разрушаться для разных людей, этот вопрос повторяется снова и снова, скучно мне.

На самом деле я забыл этот ответ, google привел меня сюда.

Я начал новый сеанс расследования и получил некоторые хорошие результаты: https://www.codeproject.com/Articles/37022/Solving-the-resx-Merge-Problem показывает, что мы можем сортировать файл resx по атрибуту data/@name LINQ. Это потрясающе. Основной код - это только один оператор, состоящий из нескольких LINQ.

Затем я также обнаружил, что ResXResourceManager, на который указывает другой ответ в этом потоке, автор ответил на вышеупомянутую статью проекта кода и добавил эту функцию в ResXResourceManager, в ResxResourceManager, вы можете настроить плагин для автоматического сортировки resx файл, когда (до) вы сохраните его на вкладке конфигурации. Там даже вариант сортировки, который вы можете выбрать: CurrentCulture, Ordinal или IgnoreCase и т.д.

К сожалению, решение для кода проекта и решение ResXResourceManager дают отличный результат, источник доступен, я обнаружил, что решение для кода-проекта рассматривает "& gt;"; значение атрибута как обычный текст, поэтому семантически связанные виджеты разделены. Это можно легко устранить, добавив TrimStart (' > ') в LINQ.

Однако, после исправления этого, два инструмента по-прежнему создают другой результат. Виртуализация - это LINQ по умолчанию, используя CurrentCulture для сортировки строки, и я полностью игнорирую параметр сортировки revelant в resXResourceManager. Для этой проблемы я считаю, что лучший вариант сортировки - "Порядковый". После добавления опции сортировки в решение для проекта кода и установки того же параметра сортировки в ResXResourceManager, в итоге они дают точно такой же результат!

Хотя resxResourceManager отлично справляется с централизованным управлением ресурсом и исправляет проблему с порядком элементов resx, инструмент кода-кода по-прежнему бесценен для меня, поскольку он является автономным, поэтому его можно использовать в более широких случаях; плюс, код очень тонкий и элегантный.

Я бы добавил еще одну заметку в конце моего обновления, я использую черепаху git, я использую Araxis для сравнения разных версий, это почти не имеет смысла сравнивать две версии файла resx, однако поддержка Araxis для пользовательского фильтра чтобы преобразовать входной файл, прежде чем он увидит его. Для сравнения, Araxis вызывает фильтр следующей командой: 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 означает foward, первое имя файла - это входной файл, второе имя файла - это выходной файл, который должен быть написан фильтром, третий - безопасным образом игнорируется. Сделав небольшое изменение кода кода проекта, я могу теперь скомпилировать программу фильтра, настроить его в Araxis и провести разумное сравнение версий resx даже в старых, перепутанных файлах resx.

Ответ 4

Использование простого diff для файлов XML может быть абсолютно бесполезным, если соответствующие элементы не отображаются в одном порядке в обоих файлах. Я также искал XML-специфический инструмент сравнения, пока что без успеха.

Тем временем обходной путь, который я использовал, заключается в следующем:

  • Откройте .resx файлы в Visual Studio.
  • Выберите все [ Ctrl + A] и вырежьте [Ctrl + X] (это может занять некоторое время для больших файлов - будьте терпеливы)
  • Вставить [ Ctrl + V] и сохранить (это приведет к повторному созданию файлов .resx, отсортированных по ключам)

Когда оба файла переупорядочены, нормальное разграничение становится намного проще. Вы можете быстро найти отсутствующие ключи, просмотрев теперь diff.

Ответ 5

Для более новых версий Visual Studio (2010+) теперь есть расширение Visual Studio, называемое ResXManager (созданное tomenglert), что удивительно для этого.

Он позволяет просматривать каждый ресурс на каждом языке бок о бок и выделяет недостающие ресурсы. (Ниже приведен пример с страницы загрузки расширений.)

Пример из страницы загрузки дополнительных страниц

Ответ 7

Вы можете использовать такой инструмент, как TortoiseSVN diff (если вы используете Windows). Просто выберите оба файла, щелкните правой кнопкой мыши и выберите "diff" из подменю TortoiseSVN.