.rc, .res, .resx и .resources: какой файл ресурсов что означает
Перейти к содержимому Руководство .rc, .res, .resx и .resources: какой файл ресурсов что означает Опубликовано 2026-09-04 Вокруг ресурсов Windows встречаются четыре расширения файлов, и два из них похожи на два других. .rc и .res принадлежат одному миру, а .resx и .resources — другому. В этом руководстве объясняется, что представляет собой каждый из них, как создаётся и где в итоге оказывается. Коротко Расширение Мир Форма Текст или двоичный Компилируется из Попадает в .rc Собственные Win32 исходный скрипт текст пишется вручную .res .res Собственные Win32 скомпилированный двоичный .rc .exe или .dll .resx .NET исходный текст (XML) дизайнер или вручную .resources .resources .NET скомпилированный двоичный .resx сборка .NET Собственная сторона и сторона .NET — это параллельные конвейеры. Они не взаимозаменяемы, и ни один из них не является более новой версией другого. Собственная сторона Win32 .rc — скрипт ресурсов Файл .rc — это текстовый скрипт. Вы пишете его (или его создаёт инструмент), и он определяет ресурсы собственного приложения: диалоги, меню, таблицы строк, акселераторы, информацию о версии и ссылки на файлы иконок, растровых изображений, курсоров и манифестов. Это читаемая исходная форма. Во время работы программы .rc никто не загружает. .res — скомпилированный файл ресурсов Компилятор ресурсов превращает .rc в .res. Это двоичный файл, содержащий те же ресурсы в формате, который ожидает компоновщик. Это промежуточный артефакт сборки. В проекте Delphi его подключают с помощью {$R myresources.res}; компоновщик C или C++ принимает .res напрямую. Ресурсы внутри .exe или .dll Когда компоновщик создаёт итоговый двоичный файл, ресурсы из .res записываются в раздел ресурсов файла PE. Затем приложение обращается к ним во время работы через API Windows (FindResource, LoadResource, LoadString и другие). Resource Builder может открыть готовый .exe или .dll и редактировать эти ресурсы на месте, изменяя двоичный файл напрямую, без возврата к .rc и повторной компоновки. Связанные типы собственных файлов Вам также встретятся: .dcr: ресурс компонента Delphi. Тот же двоичный формат, что и у .res; используется для хранения иконки компонента на палитре. .drc: созданный Delphi скрипт ресурсов, текстовый аналог .rc, который может выдавать компилятор. .manifest: файл XML, который становится ресурсом RT_MANIFEST в двоичном файле. Он объявляет такие вещи, как поддержка DPI и запрашиваемый уровень выполнения. Сторона .NET .resx — исходный файл ресурсов .NET Файл .resx — это XML. Это исходная форма, используемая при разработке приложения .NET; он содержит строки, изображения, иконки и сериализованные объекты, каждая запись которых имеет имя. Обычно его редактируют в дизайнере ресурсов Visual Studio, хотя его можно редактировать и как обычный XML или в специальном редакторе. .resources — скомпилированный файл ресурсов .NET При сборке .resx превращается в двоичный файл .resources, который затем встраивается в скомпилированную сборку .NET как именованный поток. Во время работы приложение читает записи по имени через ResourceManager или ResourceReader. Чем это отличается от собственной стороны Ресурсы .NET имеют имена и типизируются как типы CLR (System.String, System.Drawing.Bitmap и так далее). Они не имеют отношения к собственным типам RT_ICON / RT_BITMAP / RT_STRING. Сборка .NET по-прежнему является файлом PE, поэтому она может также содержать собственные ресурсы: информация о версии, иконка приложения и манифест — это собственные ресурсы RT_*, полностью отдельные от потоков управляемых .resources внутри неё. Как они связаны Они работают параллельно: .rc -> compile -> .res -> link -> resources in an .exe / .dll .resx -> compile -> .resources -> embed -> a stream in a .NET assembly Есть один мост. Файл .resx или .resources можно преобразовать в собственный .res или .rc: записи растровых изображений, иконок и курсоров становятся настоящими ресурсами BITMAP, ICON и CURSOR , а каждая другая запись становится именованным блоком RCDATA . В обратном направлении осмысленного преобразования как операции над файлом не существует. См. Преобразование .resx в собственные ресурсы Win32. Какой файл у вас есть и какой нужен У вас есть .rc, и нужен двоичный файл для компоновки: скомпилируйте его в .res. У вас есть .res или .exe/.dll, и вы хотите посмотреть или изменить содержимое: откройте его в редакторе ресурсов. У вас есть .resx, а Visual Studio нет: редактируйте его напрямую. См. Редактирование файлов .resx и .resources без Visual Studio. У вас есть двоичный файл .resources, и вы хотите его прочитать: откройте его так же, как .resx. Вы хотите узнать, что изменилось между двумя сборками или двумя файлами ресурсов: сравните их. См. Сравнение двух файлов EXE или DLL на различия в ресурсах. Где подходит Resource Builder Resource Builder открывает и редактирует все четыре формата, а также ресурсы внутри двоичных файлов .exe/.dll. Он компилирует .rc в .res, редактирует собственные ресурсы в двоичном файле на месте, открывает и сохраняет .resx и .resources и преобразует между формами .NET и собственными. Бесплатная 30-дневная пробная версия доступна на странице загрузки.
Как преобразовать файлы .resx и .resources в собственные ресурсы Win32
Перейти к содержимому Руководство Как преобразовать файлы .resx и .resources в собственные ресурсы Win32 Опубликовано 2026-08-31 Если у вас есть ресурсы в файле .NET .resx или .resources и они нужны в неуправляемом проекте, установщике или сборке на основе RC, требуется этап преобразования. Resource Builder выполняет его одной командой: изображения превращаются в настоящие ресурсы BITMAP, ICON и CURSOR, а всё остальное сохраняется как именованные RCDATA с неизменными байтами. Эта статья описывает направление от .resx/.resources к собственным ресурсам. Если же вы хотите отредактировать файл .resx или сравнить два таких файла, см. руководства по редактированию файлов ресурсов .NET и сравнению ресурсов. Что получается при преобразовании -conv сопоставляет каждую запись .NET с собственным ресурсом: Запись .NET Собственный результат Bitmap настоящий ресурс BITMAP Icon настоящий ресурс ICON (запись с несколькими размерами становится GROUP_ICON и её элементами ICON) Cursor настоящий ресурс CURSOR String, Boolean, Byte, Int16/32/64, Byte Array или любой непрозрачный тип CLR ресурс RCDATA с именем записи .NET, содержащий её исходные байты без изменений Две формы вывода: .res — скомпилированный двоичный файл ресурсов, готовый к компоновке. .rc — обычный скрипт ресурсов. Байты каждой записи встроены в виде шестнадцатеричного текста, поэтому скрипт полностью самодостаточен: не нужно хранить рядом файлы изображений или данных. Его можно открыть, прочитать, отредактировать и скомпилировать любым компилятором RC. Преобразование из командной строки Консольный инструмент — sircc64.exe. Основное приложение Resbldr5.exe принимает тот же синтаксис -conv. Между .resx и .resources sircc64.exe -conv Strings.resx Strings.resources Направление определяется по расширениям файлов. Если не указывать имя выходного файла, автоматически используется противоположное расширение: sircc64.exe -conv Strings.resx В собственный .res sircc64.exe -conv App.resx App.res Созданный скрипт компилируется внутри программы, и записывается только .res. В собственный скрипт .rc sircc64.exe -conv App.resx App.rc Записывается сам скрипт, нескомпилированный. Чтобы убедиться в его корректности, скомпилируйте его и сравните: sircc64.exe -c App.rc App-from-rc.res App-from-rc.res побайтово совпадает с .res, который напрямую создаёт -conv … App.res. Пакетное преобразование Пакетный режим в настоящее время поддерживается только для преобразования между двумя форматами .NET. Укажите для -conv шаблон *.resx или *.resources (маски * и ?), и каждый подходящий файл будет преобразован в противоположный формат за один вызов: sircc64.exe -conv *.resx Имена выходных файлов формируются автоматически из имён входных, поэтому явно заданное имя здесь игнорируется. Используйте -o <dir>, чтобы собрать результаты в одной папке, а не записывать каждый рядом с исходным. Преобразование в собственный .res или .rc выполняется для одного файла за раз. Для этих целей маски не принимаются. Коды завершения 0 — успех, 1 — ошибка, 2 — один или несколько файлов завершились ошибкой в пакетном запуске. Поэтому -conv можно безопасно использовать в сценарии сборки. Преобразование .resx в .resources в приложении Если нужно просто переключить файл между двумя форматами .NET и вы не хотите пользоваться командной строкой: откройте его в Resource Builder, выберите Файл > Сохранить как и укажите другой формат в списке типов файлов. Преобразование .resx в .resources в приложении Собственные .res и .rc не предлагаются как цели для Сохранить как. Для них используйте -conv. Как добавить ресурсы .NET в уже открытый собственный проект Если ваша цель — не отдельный файл, а объединение ресурсов .NET с существующим собственным проектом .rc или .res, сделайте это в приложении. Открыв собственный проект, выберите Файл > Импорт или Файл > Объединить и укажите файл .resx/.resources. Записи преобразуются и добавляются на месте по тому же сопоставлению, что и в -conv. Обратное направление -conv не преобразует собственные .rc, .res, .exe или .dll в .resx/.resources. Он отклоняет такую попытку с понятным сообщением. Перейти от собственных ресурсов к .NET всё же можно внутри приложения. Откройте проект .resx/.resources и используйте Файл > Импорт или Файл > Объединить для собственного источника. Ресурсы иконок, курсоров и растровых изображений становятся настоящими записями .NET, наборы STRINGTABLE распаковываются в отдельные записи .NET String с именами по #define каждой строки, а остальные типы (RCDATA, информация о версии, манифест) передаются как непрозрачные массивы байтов. Ресурсы меню, диалогов и акселераторов не имеют эквивалента в .NET и пропускаются, а их количество сообщается в конце. Что нужно знать Имена собственных ресурсов пишутся в верхнем регистре и не зависят от регистра. Две записи .NET, имена которых различаются только регистром, при преобразовании будут конфликтовать. Если это относится к вашему файлу, сначала переименуйте одну из них. Файл .rc больше двоичного. Поскольку байты каждой записи встроены в виде шестнадцатеричного текста, размер скрипта примерно втрое больше размера аналогичного .res. Файл .rc самодостаточен. Никаких сопутствующих файлов, поэтому его можно безопасно фиксировать отдельно или передавать другой команде. Попробуйте Resource Builder — коммерческий продукт с бесплатным 30-дневным пробным периодом. Скачайте его на странице загрузки и выполните sircc64.exe -conv yourfile.resx yourfile.rc, чтобы увидеть создаваемый скрипт.
Как добавить проверку регрессии ресурсов в конвейер CI
Перейти к содержимому Руководство Как добавить проверку регрессии ресурсов в конвейер CI Опубликовано 2026-08-30 Ресурсы приложения легко повредить незаметно. Слияние разрешается неверно, и иконка возвращается к старой. Рефакторинг сценария сборки теряет манифест. Круг локализации теряет три подписи меню. Компоновщик ничего не сообщает, приложение работает, и проблема попадает в релиз. Проверка регрессии ресурсов позволяет это поймать. Идея проста: хранить в системе контроля версий эталонный снимок ресурсов, сравнивать с ним каждую сборку и останавливать сборку, если что-то из прежде имевшегося пропало. Консольный инструмент Resource Builder sircc64.exe выполняет сравнение и возвращает настоящий код завершения, поэтому подключить его к CI можно несколькими строками. Что нужно для проверки регрессии ресурсов sircc64.exe — консольный компилятор и инструмент для работы с ресурсами, устанавливаемый вместе с Resource Builder. Запускайте его на сборочной машине или агенте, где установлен Resource Builder. Эталон: файл .rc/.res (или .exe/.dll), представляющий ресурсы, которые должна содержать каждая сборка; храните его вместе с исходным кодом. Шаг 1: выберите эталон Если ресурсы уже собираются из скрипта .rc Если ресурсы вашего проекта описаны в файле .rc, хранящемся в системе контроля версий, всё готово: этот скрипт и есть эталон. -diff принимает .rc напрямую и компилирует его в памяти перед сравнением, поэтому ничего не нужно отдельно извлекать или фиксировать, а любое намеренное изменение ресурсов видно как обычная проверяемая разница скрипта. Переходите к шагу 2 и укажите для -diff путь srcApp.rc. Иначе извлеките эталон из заведомо рабочей сборки Извлеките ресурсы из вашего последнего заведомо рабочего двоичного файла в файл .res: sircc64.exe -e ALL LastGood.exe cibaseline.res Файл .res содержит только ресурсы, а не весь двоичный файл, поэтому он остаётся небольшим. Однако это двоичный формат, поэтому сравнение baseline.res в системе контроля версий покажет лишь то, что он изменился, а не что именно изменилось. Для самой проверки это не важно: читаемый отчёт создаёт шаг -diff ниже, и сборка завершается с ошибкой независимо от того, что показывает ваша система контроля версий для этого файла. Если вы хотите, чтобы извлечённый эталон можно было просматривать в запросе на слияние, извлеките его как скрипт RC. sircc64.exe этого не умеет (он записывает только двоичные .res); форматированное извлечение скрипта RC — возможность основного приложения в консольном режиме: Resbldr5.exe -e ALL LastGood.exe cibaseline.rc -style P -nowait Структурные изменения (добавленный или удалённый ресурс, изменённая строка, перемещённый элемент диалога) тогда видны в сравнении как читаемый текст. Встроенные иконки и изображения по-прежнему представлены длинными шестнадцатеричными блоками, поэтому здесь возможен шум. -diff принимает эталон .rc так же легко, как и .res. В любом случае зафиксируйте эталон и относитесь к нему как к договорённости: он меняется только тогда, когда кто-то намерен изменить ресурсы, в проверенном коммите. Шаг 2: сравнивайте каждую сборку с эталоном Когда сборка создаст двоичный файл, сравните его с эталоном. Подставьте ниже путь к вашему эталону: srcApp.rc, если вы используете исходный скрипт, или cibaseline.res / cibaseline.rc, если вы извлекли эталон. sircc64.exe -diff srcApp.rc buildApp.exe -failmissing -parsestringtable -failonmissingstring > ciresource-diff.txt -failmissing устанавливает код завершения 1, если какой-либо ресурс эталона отсутствует в новой сборке. -parsestringtable разбирает наборы STRINGTABLE на отдельные строки. -failonmissingstring устанавливает код завершения 1, если отдельная строка была удалена из набора. Добавленные ресурсы и изменения содержимого на месте сами по себе проверку не проваливают. Это правильное поведение по умолчанию: CI должен блокировать сборку при «что-то пропало», а не при каждой правке. Полный отчёт в любом случае записывается в ciresource-diff.txt, чтобы вы могли прочитать, что изменилось. Отчёт выглядит так: ~ VERSION 1 (lang 1033, 1096 -> 1088 bytes) — BITMAP BITMAP_SPLASH (lang 0, 65576 bytes) — STRING 4067 (lang 0, 96 bytes) string 65071: removed (was «Some string value») ~ STRING 4068 (lang 0, 556 -> 548 bytes) string 65072: changed («Invalid stream operation 1234» -> «Invalid stream operation») ~ STRING 4069 (lang 0, 986 -> 988 bytes) ~ STRING 4071 (lang 0, 2902 -> 2904 bytes) ~ STRING 4073 (lang 0, 702 -> 704 bytes) ~ STRING 4078 (lang 0, 986 -> 988 bytes) + GROUP_ICON MAINICON (lang 1033, 188 bytes) + ICON 1 (lang 1033, 49135 bytes) + ICON 10 (lang 1033, 1128 bytes) + ICON 11 (lang 1033, 872 bytes) + ICON 12 (lang 1033, 1384 bytes) + ICON 13 (lang 1033, 296 bytes) + ICON 2 (lang 1033, 9640 bytes) + ICON 3 (lang 1033, 7336 bytes) + ICON 4 (lang 1033, 3752 bytes) + ICON 5 (lang 1033, 1640 bytes) + ICON 6 (lang 1033, 4264 bytes) + ICON 7 (lang 1033, 3240 bytes) + ICON 8 (lang 1033, 2216 bytes) + ICON 9 (lang 1033, 744 bytes) Added: 14, Removed: 2, Changed: 6 Removed strings: 1 — — удалено, + — добавлено, ~ — изменено. Здесь сборка потеряла растровое изображение и строку, поэтому проверка завершается ошибкой. Особенность побайтового сравнения STRINGTABLE Набор, созданный другим набором инструментов, может отображаться как изменённый на пару байт без видимой разницы в строках. Это различие в кодировании завершающего слота, а не потеря содержимого. -parsestringtable показывает реальную картину по отдельным строкам, а -failonmissingstring опирается на действительно удалённые строки, поэтому проверка остаётся надёжной. (Подробнее об этом в руководстве по сравнению ресурсов.) Коды завершения 0 означает, что эталон присутствует полностью. 1 означает либо настоящую ошибку (например, файл, не являющийся допустимым двоичным файлом), либо срабатывание -failmissing / -failonmissingstring. В обоих случаях конвейер должен остановиться. Строже: ошибка при любом различии Если вы хотите остановить сборку при любом изменении, включая добавленные и изменённые ресурсы, проверьте итоговую строку: findstr /C:»Added: 0, Removed: 0, Changed: 0″ ciresource-diff.txt >nul || exit /b 1 Шаг 3: подключите к CI Обычный пакетный файл или PowerShell sircc64.exe -diff srcApp.rc buildApp.exe -failmissing -parsestringtable -failonmissingstring > ciresource-diff.txt if errorlevel 1 ( echo Resource regression detected. See ciresource-diff.txt type ciresource-diff.txt exit /b 1 ) (srcApp.rc здесь означает тот эталон, который вы выбрали на шаге 1.) GitHub Actions Ненулевой код завершения автоматически завершает шаг ошибкой. Загрузите отчёт, чтобы он был доступен независимо от того, прошёл шаг или нет: — name: Resource regression check run: sircc64.exe -diff srcApp.rc buildApp.exe -failmissing -parsestringtable -failonmissingstring | Tee-Object ciresource-diff.txt shell: pwsh — name: Upload resource diff if: always() uses: actions/upload-artifact@v4 with: name: resource-diff path: ci/resource-diff.txt На раннере должен быть установлен Resource Builder, поэтому используйте собственный Windows-раннер или более ранний шаг настройки, который его устанавливает. Настройка
Как сравнить два файла EXE или DLL на различия в ресурсах
Перейти к содержимому Руководство Как сравнить два файла EXE или DLL на различия в ресурсах Опубликовано 2026-08-29 Когда что-то в выпущенной сборке выглядит неправильно, первым часто возникает вопрос: «какой ресурс изменился?» Возможно, иконка вернулась к старой версии, строка информации о версии устарела или при локализации незаметно пропала подпись пункта меню. Сравнивать два двоичных файла вручную долго, и легко ошибиться. Resource Builder может сравнить ресурсы двух файлов EXE и DLL и показать, что именно добавлено, изменено или удалено, без ручной распаковки. В графическом интерфейсе то же сравнение охватывает также скомпилированные файлы .res, скрипты .rc и файлы .NET .resx / .resources; инструмент командной строки работает с собственными форматами. Типичные случаи использования: Проверка регрессии перед выпуском: сравните новую сборку с последней заведомо рабочей. Контроль качества локализации: убедитесь, что в переведённой сборке есть все строки и диалоги базовой сборки. Аудит сторонней DLL: посмотрите, что на самом деле содержат её ресурсы и что изменилось между двумя её версиями. Что можно сравнивать Диалог Сравнить… в графическом интерфейсе сравнивает открытый проект с другим файлом на диске: Если ваш проект — скрипт или файл собственных ресурсов, его можно сравнить с другим скриптом .rc, скомпилированным файлом .res или исполняемым файлом (.exe / .dll). Если ваш проект — файл ресурсов .NET (.resx / .resources), его можно сравнить только с другим файлом .resx / .resources. Сравнение выявляет различия в однотипных наборах ресурсов с течением времени, а не между разными форматами, поэтому файл несовместимого типа отклоняется с понятным сообщением. Сравнение всегда отражает текущее состояние проекта в памяти, включая несохранённые правки, а не только то, что было записано на диск в последний раз. Сравнение ресурсов EXE и DLL в графическом интерфейсе Откройте файл, который вы считаете базовым, или файл, который проверяете. Открытым проектом может быть любая из сторон; сравнение показывает, что другой файл добавляет, изменяет или удаляет относительно него. Выберите Файл > Сравнить… или на ленте Проект > Импорт > Сравнить…. Выберите другой файл в диалоге. Для .exe или .dll это просто сам двоичный файл, без шага извлечения. Сравнение ресурсов EXE и DLL в Resource Builder Чтение результатов Каждое различие выводится в списке и выделяется цветом как Добавлено, Изменено или Удалено: Иконка или курсор с несколькими размерами отображается одной общей строкой, как и в основном дереве проекта, а не отдельной строкой для каждого размера. При выборе строки старая и новая версии показываются рядом в областях просмотра, поэтому видно, чем именно они отличаются. Для изменённого набора STRINGTABLE просмотр показывает полный текст обеих версий. Используйте переключатели фильтра и поле поиска, чтобы сузить список, а кнопки Отметить все / Снять все / Инвертировать / Все добавленные / Все изменённые — чтобы быстро выбрать строки. Сравнение изменённого ресурса иконки Слияние различий обратно в проект Отметьте нужные строки Добавлено и Изменено и нажмите Объединить: Добавленные строки вставляются в проект как новые ресурсы. Изменённые строки заменяют данные существующего ресурса на месте. Удалённые строки носят только информационный характер и не имеют флажка. Слияние никогда ничего не удаляет из вашего проекта. Поэтому сравнение полезно не только как проверка, но и как способ подтянуть изменения: если две сборки разошлись, вы можете перенести только изменившиеся ресурсы и не трогать остальное. Особенность побайтового сравнения STRINGTABLE Одному не стоит удивляться: если сравнивать с файлом, в котором ресурсы STRINGTABLE собраны другим компилятором или инструментом, набор может отображаться как Изменено на пару байт, хотя все строки в нём в области просмотра читаются одинаково. Разные компиляторы по-разному кодируют завершающий пустой слот в конце набора из 16 строк. Это не настоящее различие содержимого. Если нужна проверка в скрипте, разбирающая набор на отдельные строки, используйте параметр -parsestringtable инструмента командной строки, описанного ниже. Сравнение из командной строки То же сравнение выполняется без графического интерфейса: sircc64.exe -diff file1 file2 Каждый из file1 и file2 может быть файлом .exe, .dll, .res или исходным файлом .rc. Выводится текстовый отчёт о различиях. -diff всегда принимает ровно два файла и не поддерживает маски. Параметры: Параметр Действие -ignoretype TYPE[,TYPE…] Исключает из сравнения целые типы ресурсов. Принимает известные имена RT_* (ICON, BITMAP, VERSION, …) или буквальное имя пользовательского типа (PNG, SVG). -nochanges Пропускает сравнение содержимого. Сообщает только о добавленных и удалённых ресурсах, никогда об «изменённых». -failmissing Устанавливает код завершения 1, если какой-либо ресурс из file1 отсутствует в file2. В остальных случаях отчёт носит только информационный характер. -parsestringtable Дополнительно сравнивает отдельные строки внутри наборов STRINGTABLE , а не только хэш набора. -failonmissingstring Вместе с -parsestringtable устанавливает код завершения 1, если отдельная строка была удалена из набора. Коды завершения: 0 — успех, 1 — ошибка, а для -diff также 1 при срабатывании -failmissing или -failonmissingstring. Пример: остановить сборку, если пропали ресурсы sircc64.exe -diff last-goodApp.exe buildApp.exe -failmissing -parsestringtable -failonmissingstring if errorlevel 1 ( echo Resource regression detected exit /b 1 ) Эта проверка проходит, только если в новой сборке есть все ресурсы и все записи таблицы строк, которые были в последней заведомо рабочей сборке. Подробнее о том, как встроить это в конвейер CI, включая сравнение с зафиксированным эталоном и вывод результатов в журнал сборки, рассказано в отдельной статье. Попробуйте Resource Builder — коммерческий продукт с бесплатным 30-дневным пробным периодом. Скачайте его на странице загрузки, откройте любую сборку и запустите Сравнить… с предыдущей версией.
Как редактировать файлы .resx и .resources без Visual Studio
Перейти к содержимому Руководство Как редактировать файлы .resx и .resources без Visual Studio Опубликовано 2026-08-28 Файлы .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 Редактирование текстовых значений Дважды щёлкните строковую запись или выберите её и нажмите Enter, чтобы открыть редактор значения на вкладке. Измените текст, и изменение будет храниться в проекте до сохранения. Чтобы переименовать саму запись, нажмите F2 или выберите Переименовать в контекстном меню. Имя — это ключ, по которому ваш код ищет строку, поэтому оно должно совпадать с тем, что ожидает исходный код. Редактор строк ресурсов .NET Редактирование логических и числовых значений Записи Boolean открываются с флажком вместо текстового поля. Это сделано намеренно: в текстовом редакторе можно сохранить, например, true с пробелом в конце или Yes, и .NET затем прочитает это как False без какого-либо предупреждения. Флажок исключает целый класс таких ошибок. Записи Byte, Int16, Int32, Int64 и byte-array открываются в том же редакторе значений с разбором, соответствующим типу, поэтому неверное число отклоняется, а не записывается. Редактор логических значений ресурсов .NET Редактирование изображений Записи Bitmap, Icon и Cursor открываются в полноценных визуальных редакторах — тех же, что используются для собственных ресурсов: Растровые изображения открываются в многослойном редакторе изображений. Иконки и курсоры открываются в редакторе иконок. Добавление новой запускает тот же мастер нового ресурса для нескольких размеров, что и в проектах собственных ресурсов, поэтому одна запись иконки может содержать кадры от 16×16 до 256×256 с несколькими глубинами цвета. Чтобы полностью заменить изображение, выберите запись и используйте Обновить из файла. Поддерживаются PNG, BMP, GIF, JPEG, ICO, CUR, SVG, WebP и другие форматы. Resource Builder поддерживает как современное соглашение .resx, при котором изображение хранится в виде необработанных байтов файла, так и более старую обёрнутую кодировку, которую ещё используют некоторые прежние файлы .resx, поэтому изображения из файлов обоих видов загружаются правильно. При сохранении исходная кодировка изображения, которое вы не трогали, сохраняется. Редактор изображений ресурсов .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 Пакетный режим и командная строка Для повторяющихся задач sircc64.exe -conv преобразует файлы .resx/.resources (и далее в собственные .res/.rc) по списку файлов или маске, возвращая настоящие коды завершения процесса для скриптов. Инструмент Сравнение (Файл > Сравнить…) также работает с файлами .resx/.resources, поэтому вы можете сравнить один файл ресурсов .NET с другим и увидеть, что именно добавил, изменил или удалил перевод. Попробуйте Resource Builder — коммерческий продукт с бесплатным 30-дневным пробным периодом. Скачайте его на странице загрузки и откройте любой файл .resx, чтобы увидеть, как это работает.