Руководство

.rc, .res, .resx и .resources: какой файл ресурсов что означает

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

Вокруг ресурсов 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-дневная пробная версия доступна на странице загрузки.