Руководство

Как редактировать файлы .resx и .resources без Visual Studio

Опубликовано

Файлы .resx и .resources содержат строки, изображения и другие данные, которые приложение .NET загружает во время работы. Обычно такой файл редактируют, открывая всё решение в Visual Studio и используя таблицу ресурсов. Это лишние хлопоты, если нужно лишь исправить переведённую строку, заменить иконку или посмотреть, что находится в ресурсах сторонней сборки.

Resource Builder открывает файлы .resx и .resources напрямую. Вы редактируете записи в том же дереве и теми же визуальными редакторами, что и для собственных ресурсов Windows .rc/.res, а затем сохраняете файл на месте. Не нужны ни решение, ни сборка, ни лицензия Visual Studio. Это удобно переводчикам и дизайнерам, не работающим в Visual Studio, для быстрых правок на сборочной машине, а также для просмотра и правки ресурсов в сборке, которую вы не компилировали сами.

Что это за файлы

Существует два связанных формата:

  • .resx — это XML-файл. Его редактируют при разработке. Каждая запись представляет собой узел с именем, типом и значением.
  • .resources — это скомпилированная двоичная форма тех же данных. Её создаёт сборка, и именно она оказывается внедрённой в вашу сборку.

Resource Builder читает и записывает оба формата и умеет преобразовывать их друг в друга.

Открытие файла

Выберите Файл > Открыть и укажите файл. В диалоге открытия есть фильтр «Все поддерживаемые файлы», который уже включает .resx и .resources, а также отдельные пункты «ResX Scripts (*.resx)» и «.RESOURCES Files», если нужно сузить список.

Resource Builder разбирает файл и показывает каждую запись в дереве проекта, сгруппированную по типу:

  • Строки отображаются в группе String.
  • Изображения отображаются в группах Bitmap, Icon и Cursor.
  • Каждый другой тип .NET получает собственную группу с именем типа, например System.Int32.

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

Открытие файла ресурсов .NET
Открытие файла ресурсов .NET

Редактирование текстовых значений

Дважды щёлкните строковую запись или выберите её и нажмите Enter, чтобы открыть редактор значения на вкладке. Измените текст, и изменение будет храниться в проекте до сохранения.

Чтобы переименовать саму запись, нажмите F2 или выберите Переименовать в контекстном меню. Имя — это ключ, по которому ваш код ищет строку, поэтому оно должно совпадать с тем, что ожидает исходный код.

Редактор строк ресурсов .NET
Редактор строк ресурсов .NET

Редактирование логических и числовых значений

Записи Boolean открываются с флажком вместо текстового поля. Это сделано намеренно: в текстовом редакторе можно сохранить, например, true с пробелом в конце или Yes, и .NET затем прочитает это как False без какого-либо предупреждения. Флажок исключает целый класс таких ошибок.

Записи Byte, Int16, Int32, Int64 и byte-array открываются в том же редакторе значений с разбором, соответствующим типу, поэтому неверное число отклоняется, а не записывается.

Редактор логических значений ресурсов .NET
Редактор логических значений ресурсов .NET

Редактирование изображений

Записи Bitmap, Icon и Cursor открываются в полноценных визуальных редакторах — тех же, что используются для собственных ресурсов:

  • Растровые изображения открываются в многослойном редакторе изображений.
  • Иконки и курсоры открываются в редакторе иконок. Добавление новой запускает тот же мастер нового ресурса для нескольких размеров, что и в проектах собственных ресурсов, поэтому одна запись иконки может содержать кадры от 16×16 до 256×256 с несколькими глубинами цвета.
  • Чтобы полностью заменить изображение, выберите запись и используйте Обновить из файла. Поддерживаются PNG, BMP, GIF, JPEG, ICO, CUR, SVG, WebP и другие форматы.

Resource Builder поддерживает как современное соглашение .resx, при котором изображение хранится в виде необработанных байтов файла, так и более старую обёрнутую кодировку, которую ещё используют некоторые прежние файлы .resx, поэтому изображения из файлов обоих видов загружаются правильно. При сохранении исходная кодировка изображения, которое вы не трогали, сохраняется.

Редактор изображений ресурсов .NET
Редактор изображений ресурсов .NET

Добавление, переименование и удаление записей

Щёлкните узел группы правой кнопкой мыши, чтобы добавить новую запись этого типа, или используйте меню Ресурс. Переименование — F2, удаление — Del.

Всё, для чего в Resource Builder нет специального редактора, передаётся без изменений. Оно сохраняется ровно в том виде, в каком было прочитано, поэтому ничто в файле, чего вы не редактировали, не теряется и не переписывается. В .resx также сохраняются комментарии, ссылки <metadata> и <assembly>: программа переписывает только те узлы <data>, которые вы действительно изменили.

Сохранение и преобразование между двумя форматами

Файл > Сохранить записывает файл обратно на то же место. Файл > Сохранить как позволяет записать его в другом формате .NET, то есть превратить .resx в скомпилированный .resources или наоборот.

Файл .resx или .resources можно также преобразовать в собственный файл Win32 .res или .rc. Записи Bitmap, Icon и Cursor становятся настоящими ресурсами BITMAP, ICON и CURSOR, а каждая другая запись становится именованным блоком RCDATA с сохранёнными байтами. Это работает как из графического интерфейса, так и из командной строки с ключом -conv. Отдельная статья подробно описывает это.

Управляемые ресурсы внутри скомпилированной сборки .NET

Эта статья посвящена отдельным файлам .resx и .resources. Потоки управляемых ресурсов .resources, уже скомпилированные в .NET .exe или .dll, — это отдельный случай: откройте сборку через Файл > Ресурсы .NET, чтобы просмотреть и извлечь эти потоки. Этот режим только для чтения. Чтобы изменить поток, извлеките его, отредактируйте полученный файл .resources описанным выше способом и пересоберите сборку.

Обратите внимание: речь идёт только об управляемых ресурсах. Собственные ресурсы Win32 внутри .exe или .dll (иконки, информация о версии, манифесты, растровые изображения, диалоги и прочее) полностью редактируются на месте: откройте двоичный файл, измените нужное и сразу сохраните обратно.

Ресурсы .NET в управляемом EXE
Ресурсы .NET в управляемом EXE

Пакетный режим и командная строка

Для повторяющихся задач sircc64.exe -conv преобразует файлы .resx/.resources (и далее в собственные .res/.rc) по списку файлов или маске, возвращая настоящие коды завершения процесса для скриптов.

Инструмент Сравнение (Файл > Сравнить…) также работает с файлами .resx/.resources, поэтому вы можете сравнить один файл ресурсов .NET с другим и увидеть, что именно добавил, изменил или удалил перевод.

Попробуйте

Resource Builder — коммерческий продукт с бесплатным 30-дневным пробным периодом. Скачайте его на странице загрузки и откройте любой файл .resx, чтобы увидеть, как это работает.