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

Это проблема:

con==False

Должно быть:

con=False
22
задан jalbert 25 September 2008 в 22:37
поделиться

6 ответов

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

33
ответ дан 29 November 2019 в 04:02
поделиться

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

Тем временем, обходное решение, которое я использовал, является этим:

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

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

6
ответ дан 29 November 2019 в 04:02
поделиться

Вы могли кодировать что-то использующее XML, Различный, См. Используя Инструмент Разности и Патча XML в Ваших Приложениях .

0
ответ дан 29 November 2019 в 04:02
поделиться

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

-2
ответ дан 29 November 2019 в 04:02
поделиться

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

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

7
ответ дан 29 November 2019 в 04:02
поделиться

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

  1. XmlDiff
  2. Araxis
  3. Altova DiffDog
  4. XML Блокнот
  5. ExamXML
  6. Liquid XML Studio 2009 (есть XML-дифф-меню, но его может использовать только лицензионная версия. Так что у меня нет возможности попробовать)

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

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

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

  2. Блокнот XML имеет простую встроенную XML-дифф. В соответствии с окном вывода я думаю, что он использует компонент XmlDiff. И вывод такой же, как и XmlDiff. Я деинсталлирую его.

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

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

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

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

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

label1.Size
label1.Location
label1.Width

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

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

UPDATE 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 дают разный результат, источник доступен, я обнаружил, что кодово-проектное решение рассматривает значение атрибута ">>" как обычный текст, поэтому семантически связанные виджеты отделены друг от друга. Это легко исправить, добавив TrimStart('>') в LINQ.

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

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

Я бы добавил ещё одну заметку в конце моего обновления: я использую tortoise 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.8032.2 C:\Users\ADMINI~1\AppData\mrg.8032.2 C:\Users\ADMINI\Local\mrg.8032 .4

-f означает foward, первое имя файла - входной файл, второе - выходной файл, который должен записать фильтр, третье можно смело игнорировать. После внесения небольших изменений в код проекта, я могу скомпилировать программу-фильтр, настроить ее в Araxis, и сделать разумное сравнение ревизий resx даже на старых, испорченных файлах resx.

.
5
ответ дан 29 November 2019 в 04:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: