Ресурсные файлы что это
Ресурсы сборки также еще называют двоичными ресурсами, потому что они встраиваются в скомпилированную сборку (EXE- или DLL-файл проекта) в виде "непрозрачного" большого двоичного объекта.
Именно с использованием двоичных ресурсов всякий раз, когда компилируется приложение, все XAML-файлы в проекте преобразуются в более удобные для синтаксического анализа BAML-файлы. Далее эти BAML-файлы вставляются в сборку в виде отдельных ресурсов. Собственные ресурсы добавляются так же легко.
Пространство имен System.Resources
Давайте кратко пройдемся по всем классам, которые содержатся в пространстве имен System.Resources и позволяют работать с ресурсами.
Класс ResourceManager
Может использоваться для получения ресурсов, относящихся к текущей культуре, из сборок или файлов ресурсов. С помощью ResourceManager можно получать сразу целый набор ресурсов для определенной культуры в виде экземпляра ResourceSet.
Класс ResourceSet
Позволяет представлять набор ресурсов для определенной культуры. При создании экземпляр ResourceSet он производит перечисление по классу, реализуя интерфейс IResourceReader, и сохраняет все ресурсы в HashTable.
Интерфейс IResourceReader
Используется в ResourceSet для перечисления ресурсов. Класс ResourceReader реализует этот интерфейс.
Класс ResourceWriter
Применяется для создания файла ресурсов и реализует интерфейс IResourceWriter.
Классы ResXResourceSet, ResXResourceReader и ResXResourceWriter
Похожи на классы ResourceSet, ResourceReader и ResourceWriter, но служат для создания не бинарного файла ресурсов, а не XML-файла .resx. Вместо того чтобы встраивать ресурс в XML-файл, они позволяют добавлять на него ссылку с помощью ResXFileRef.
Пространство имен System.Resources.Tools
Содержит класс StronglyTypedResourceBuilder, который можно использовать для создания класса из ресурса.
Создание ресурса
В представление ресурсоввыберите RC-файл, а затем используйте команду изменить>Добавление ресурса и выберите тип ресурса для добавления в проект.
Можно также щелкнуть правой кнопкой мыши RC-файл в представление ресурсов и выбрать в контекстном меню пункт Добавить ресурс .
в Обозреватель решенийщелкните правой кнопкой мыши папку проекта, выберите добавить>добавить ресурс и выберите тип ресурса для добавления в проект.
Если у вас еще нет RC-файла в проекте, этот шаг создаст его. Затем можно повторить этот шаг, чтобы добавить конкретные типы ресурсов в новый RC-файл.
В представление классовщелкните правой кнопкой мыши проект, выберите Добавить>Добавить ресурс и выберите тип ресурса для добавления в проект.
используйте меню Project>добавить ресурс.
Изменяемые ресурсы
Чтобы изменить содержащиеся в них ресурсы, можно открыть следующие типы файлов:
Имя файла | Описание |
---|---|
.rc | Файлы скриптов ресурсов |
.rct | Файлы шаблонов ресурсов |
.res | Файлы ресурсов |
.resx | Управляемые файлы ресурсов |
.exe | Исполняемые файлы |
.dll | Файлы библиотек динамической компоновки |
.bmp , .ico , .dib , .cur | Точечные рисунки, значки, панели инструментов и файлы курсоров |
среда Visual Studio работает с и влияет на следующие файлы при редактировании ресурсов:
Редакторы ресурсов напрямую не читают и не считывают .rc файлы Resource. h. Компилятор ресурсов компилирует их в .aps файлы, используемые редакторами ресурсов. Этот файл представляет собой этап компиляции и содержит только символьные данные.
Как и в случае обычного процесса компиляции, сведения, не являющиеся символьными, например комментарии, удаляются в процессе компиляции.
.aps Если файл не синхронизирован с .rc файлом, .rc файл создается повторно. Например, при сохраненииредактор ресурсов перезаписывает .rc файл и resource.h файл. Любые изменения в ресурсах остаются включенными в .rc файл, но комментарии всегда теряются после .rc переписывания файла. Сведения о том, как сохранять комментарии, см. в разделе Включение ресурсов во время компиляции.
Открытие файла скрипта ресурсов
Вы можете просматривать ресурсы в файле скрипта ресурсов, не открывая проект. Файл скрипта откроется в окне документа, а не в представление ресурсов.
Некоторые команды доступны только в том случае, если файл открыт автономно, то есть вне проекта без предварительной загрузки проекта. Например, чтобы использовать команду Сохранить как и сохранить файл с другим форматом или именем файла, файл должен быть открыт автономно.
Чтобы открыть файл скрипта ресурсов за пределами проекта, в меню последовательно выберите пунктыОткрытьфайл> и файл. Перейдите к файлу описания ресурсов, выделите его и нажмите кнопку Открыть.
Иногда требуется просмотреть содержимое файла скрипта ресурсов проекта без использования редакторов ресурсов для открытия ресурса. Например, может требоваться найти строку во всех диалоговых окнах в файле ресурсов без открытия каждого из этих окон. Файл ресурсов можно легко открыть в текстовом формате для просмотра всех содержащихся в нем ресурсов и выполнения глобальных операций, поддерживаемых текстовым редактором.
Чтобы открыть файл сценария ресурсов в текстовом формате, используйте стрелку раскрывающегося списка в правой части кнопки Открыть на предыдущем шаге и выберите Открыть с помощью. Выберите Редактор исходного кода (текстовый) и в раскрывающемся списке Открыть как выберите текст , и ресурс откроется в редакторе исходного кода .
Чтобы открыть несколько сценариев ресурсов, выполните описанные выше действия для каждого открываемого файла, например Source1. RC и source2. RC. Затем, когда оба RC-файла открыты в отдельных окнах документов, либо используйте меню окно , либо щелкните правой кнопкой мыши один из файлов и выберите пункт Новая группа горизонтальных вкладок или Новая группа вертикальных вкладок. Теперь окна выводятся мозаикой, чтобы их можно было просматривать одновременно.
чтобы открыть файлы скриптов ресурсов, щелкните rc-файл правой кнопкой мыши в Обозреватель решений, выберите команду открыть с помощью и выберите редактор исходного кода (текстовый).
при создании приложения Microsoft Foundation Class (MFC) для Windows с помощью мастера приложений MFCмастер создает базовый набор файлов, включая файл скрипта ресурсов (rc), который содержит основные функции MFC. однако эти функции, относящиеся к mfc, недоступны при редактировании rc-файла для Windows приложений, не основанных на MFC. к ним относятся мастера кода, строки команд меню, содержимое списка для элементов управления "поле со списком" и размещение элемента управления ActiveX.
Чтобы добавить поддержку MFC с открытым файлом скрипта ресурсов, в представление ресурсоввыделите папку Resources (например, MFC. RC). затем в окно свойствзадайте для режима MFCзначение True.
Кроме установки режима MFC, RC-файл должен быть частью проекта MFC. Установка режима MFC в значение true для RC-файла в проекте Win32 не предоставляет возможности MFC.
Ресурсы манифеста
В проектах классических приложений C++ Ресурсы манифеста представляют собой XML-файлы, описывающие зависимости, используемые приложением. например, в Visual Studio файл манифеста, созданный мастером MFC, определяет версию Windows общих библиотек управления, которые приложение должно использовать:
для приложения Windows XP или Windows Vista ресурс манифеста должен указывать самую последнюю версию Windows стандартных элементов управления для использования приложением. В приведенном выше примере используется версия 6.0.0.0 , которая поддерживает Syslink элемент управления.
Допускается иметь только один ресурс манифеста на каждый модуль.
чтобы просмотреть сведения о версии и типе, содержащиеся в ресурсе манифеста, откройте файл в средстве просмотра XML-файлов или Visual Studio текстовом редакторе. Если вы откроете ресурс манифеста из представления ресурсов, этот ресурс откроется в двоичном формате.
Преобразование существующего файла ресурсов в шаблон
Откройте файл скрипта ресурсов и в меню выберите файл>Сохранить имя файла> как. Укажите расположение и нажмите кнопку ОК.
Большинству создателей игр рано или поздно хочется упаковать сотни (а порой и тысячи) файлов, используемых игрой, в один (или несколько) компактных ресурсных файлов.
Если вдруг вы об этом не задумывались, то вот ссылка на тему.
Я сам занимаюсь этой темой уже достаточно давно и есть кое-какие наработки, но на данном этапе хочется расширить свой кругозор и узнать мнения других разработчиков. Интересуют такие вопросы:
1) Какое решение вы используете в своем проекте: самописное, zlib, что-либо иное?
2) Почему вы выбрали именно это решение?
3) Что вам нравится в вашем решении? Что не нравится, но лень переделывать? Чего вам не хватает, но опять таки лень дописывать?
Заранее благодарен за ответы.
Я вот прочитал "ссылку на тему" и хочу прокомментировать выпады автора на счет Valve.
Во первых, совершенно очевидно, что автор никогда в жизни не держал в руках коробку с лицензионной игрой от Valve и тем более никогда такую игру не устанавливал. Потому как лицензионная игра состоит не из 40000 тысяч файлов, а из нескольких огромных архивов *.gcf, объединяемых движком в виртуальную файловую систему. Но даже не это главное. Суть же в том, что даже пиратская версия, собранная из тех-же *.gcf, только распакованных (и файлов там действительно дофига) по скорости загрузки уровня ничем не уступает лицензионной версии, а может даже загружается быстрее. Так что профит от всей этой затеи разве что в простоте/скорости установки и, как видится мне, в оптимизации доступа к файлам в случае медленных носителей (т.е. например на приставках).
dw3105
> 1) Какое решение вы используете в своем проекте: самописное, zlib, что-либо
> иное?
zlib - это архивация, и никак не связана с виртуальной файловой системой. (разве что косвенно, если в в эту систему встроен архиватор)
странно ты вопрос ставишь - всякое решение зависит от поставленных задача, если пытаться сделать нечто сферически-универсальное в вакууме, то выйдет как минимум FAT32 =))
в приведенной статье не нашел примера с тестом производительности. кроме того что автор брызгает слюной и кричит что все вокруг идиоты ничего в его записях умного нету. в указанной статье наехал на VALVe, стоить перейти на следующую страницу ( снизу стрелка ) и тутже он обсерает Intel Nvidia Autodesk и другие крупные компании. Читать противно когда ничего не достигший человек обсерат успешные компании (как минимум это говорит о том, что сам он в жизни ничего не сделал нормального, а продуктами указанных компаний пользуется весь мир, их их имена знает каждый. ) жалко, что там нету комментариев к статьям, а тоб я пожелал автору захлебнуться в совем дерьме. (прошу прощения за столь резкие высказывания)
Зы а еще автор статьи - boostофил
и по теме - какая все-таки задача?
у меня например обновление программы происходит через интернет, довольно регулярно. делать один большой файл - это ИМХО глупость в таком случае. придется качать много данных из за какой-нибудь мелкой текстурки. либо писать сложноую навороченную виртуаьлную файловую систему, но тогда точно надо выяснить - есть ли от этого хоть какойто толк.
Kloun
> жалко, что там нету комментариев к статьям
Kloun
> странно ты вопрос ставишь - всякое решение зависит от поставленных задача, если
> пытаться сделать нечто сферически-универсальное в вакууме, то выйдет как
> минимум FAT32 =))
Вот я и хочу грамотно поставить задачу, для начала. Как FAT32/NTFS/. нет смысла делать, т.к. чтение физического файла осуществляется средствами системы, поэтому на долю разработчика виртуальной ФС остается реализация сравнительно малой части фич реальной ФС.
> Зы а еще автор статьи - boostофил
Звучит как оскорбление. Обычно такое отношение к boost'у характерно для приверженцев NIH.
> Звучит как оскорбление. Обычно такое отношение к boost'у характерно для
> приверженцев NIH.
Везде есть границы разумного. а он прямо бредит этим бустом.
dw3105
> Вот я и хочу грамотно поставить задачу, для начала
для начала тогда надо определиться "зачем". какие задачи\проблемы должна решать ВФС?
Много мелких файлов в игре - ето чревато неефективной загрузкой, из-за множества file open операций и в основном невозможностью все прочитать одним махом, прямо бинарнъм куском в память.
К обновлению по сети ето отношение не имеет, ибо ресурснъе файлъ маленькие и действительно лучше обновлять их цельно бинарнъм паком. Или группами паков, если уж ето так неефективно.
Объчно же люди обновляют не по 1-2 файлику, а прямо релизят патч, которъй или потом перегружает часть файлов оригинальной игръ юзая перегрузку файловой системъ движка, или делает разпаковку ресурсов игръ, подмена, пакует опять (WoW).
А у нас из движка сейчас буст выпиливается нафиг, так как он сильно увеличивает время компиляции и размер бинарников.
Знаю, автор тех статей порекомендовал-бы нам купить новые компы.
Kloun
> для начала тогда надо определиться "зачем". какие задачи\проблемы должна решать
> ВФС?
Любые (в пределах разумного) с которыми может столкнуться среднестатистический программист Петя, если пожелает хранить кучу файлов в одном ресурсном файле. При этом иметь максимально простой интерфейс и быть платформенно/языково-независимой.
BUzer
> А у нас из движка сейчас буст выпиливается нафиг, так как он сильно увеличивает
> время компиляции и размер бинарников.
. и заменяется на свои родные велосипеды?
> Знаю, автор тех статей порекомендовал-бы нам купить новые компы.
И был бы прав.
dw3105
> среднестатистический программист Петя
Он об паках вообще не должен знать, в принципе. Т.е. оптимизировать игру с точки зрения загрузки так или иначе будет не он.
dw3105
Не надо про буст холиварить, достаточно посмотреть на то, насколько он юзается в професиональнъй gamedev проектах - т.е. почти нисколько.
dw3105
> Если вдруг вы об этом не задумывались, то вот ссылка на тему.
По поводу статьи. КГ/АМ, хотя в некоторых моментах автор все-же прав. Но его стиль изложения. Я б во-первых, никогда не взял бы на работу человека с таким стилем мыслей, а во-вторых, очень хотел-бы глянуть на список реальных продуктов, выпущенных с его участием. Что-то мне подсказывает, что список-то невелик.
Теперь по сути:
dw3105
> 1) Какое решение вы используете в своем проекте: самописное, zlib, что-либо
> иное?
Юзаем самописный менеджер, который работает как с обычными файлами, так и с большими "компаундами" из файлов, причем интерфейсы, видимые снаружи, не требуют указания, где данные лежат - в файле или в компаунде. Внутри компаунда - примитивненькая файловая система - в начале - TOC, далее - просто сложены данные в непаковоном виде. Допускаются (для удобства) "фолдеры" внутри компаунда. Все достаточно просто и прозрачно.
dw3105
> 2) Почему вы выбрали именно это решение?
Основных резона было 2 - во-первых, доставать данные из одного здорового файла банально быстрее, нежели из сотни маленьких, т.к операции открытия/закрытия файлов далеко небесплатны, а в случае, если данные лежат на CD/DVD/BD, еще и сики медленные. Во-вторых - удобнее инсталлить продукт - проще скопировать 1 здоровый файл, нежели 100 маленьких. И опять-же, если инсталлиться с диска - быстрее. Кроме того, есть еще такое себе квази-параноидальный резон - в здоровом файле НЕМНОЖКО менее удобно колупаться, а значит, некоторое количество любопытствующих отсеется. Но это в наше время не суть, конечно, важно, потому что отдельно взятые файлы вряд-ли несут в себе какое-либо ноу хау, что б был смысл что-то специально прятать. Разве что текстуры. так не жалко, в принципе. =)
dw3105
> 3) Что вам нравится в вашем решении? Что не нравится, но лень переделывать?
> Чего вам не хватает, но опять таки лень дописывать?
Ну, у нас есть один момент - для компиляции компаунда нужно юзать самописную утилиту. Она, хоть и имеет более-менее вменяемый интерфейс, сплошь и рядом вызывает вопросы у художников. Хочется сделать все проще, но руки не доходят никак. =)
А чего не хватает. Плагина для FAR, что б работать с компаундами. Но до этого руки вряд-ли в ближайшее время дойдут
Прежде чем посмотреть, как применять ресурсы для локализации приложений, сначала ознакомимся с методами создания и чтения ресурсов без принятия во внимание языковых аспектов.
Добавление ресурсов
Для создания собственных ресурсов следует добавить в проект нужный файл и установить для него свойство Build Action (Действие при построении) (в окне Properties (Свойства)) значение Resource (Ресурс). К счастью, больше ничего делать не понадобится.
Для более удобной организации можно создать в проекте подпапки (щелкнув правой кнопкой мыши в окне Solution Explorer (Проводник решений) и выбрав в контекстном меню пункт Add --> New Folder (Добавить --> Новая папка)) и применять их для упорядочивания различных типов ресурсов.
Ресурсы, добавляемые подобным способом, легко обновлять. Все, что для этого необходимо — заменить файл и скомпилировать приложение заново. Например, в случае создания такого проекта, как был показан на рисунке, все новые файлы можно было бы скопировать в папку Images с помощью проводника Windows. Поскольку содержимое файлов, входящих в состав проекта, заменяется, выполнять какие-то специальные действия в Visual Studio не требуется (за исключением фактической компиляции приложения).
Однако существует несколько вещей, которые не следует делать для того, чтобы использовать ресурсы сборки успешно:
Не следует устанавливать для свойства Build Action значение Embedded Resource (встроенный ресурс). Хотя все ресурсы сборки являются встроенными ресурсами по определению, действие Build Action приводит к размещению двоичных данных в более трудном для доступа месте. Поэтому для приложений WPF нужно всегда использовать просто значение Resource (Ресурс).
Не следует применять доступную в окне Project Properties (Свойства проекта) вкладку Resources (Ресурсы). WPF не поддерживает такой тип URI-идентификаторов ресурсов.
Любознательные программисты обычно желают знать, что происходит с ресурсами, которые они встраивают в свои сборки. На самом деле WPF объединяет их все в один поток (вместе с ресурсами BAML). Этот один поток ресурсов получает имя в формате ИмяСборки.g.resources.
Все управляемые ресурсы, которые нужно редактировать, должны быть связанными ресурсами. Редакторы ресурсов Visual Studio не поддерживают редактирование внедренных ресурсов.
Термин файл ресурсов может ссылаться на любой из нескольких типов файлов, например:
Файл скрипта ресурсов ( .rc ) программы.
Файл шаблона ресурсов ( .rct ).
Отдельный ресурс, существующий как отдельный файл. Этот тип включает точечный рисунок, значок или файл курсора, на .rc который ссылается файл.
Файл заголовка, созданный средой разработки. Этот тип включает Resource.h , на .rc который ссылается файл.
Другие типы файлов, такие как .exe , .dll и .res , могут также содержать ресурсы, к которым можно получить доступ, хотя первые два обычно не считаются файлами ресурсов.
В проекте можно работать с файлами ресурсов и ресурсами . Вы также можете работать с ресурсами и файлами ресурсов, которые не являются частью текущего проекта или были созданы вне среды разработки Visual Studio. Например, администратор может сделать следующее:
Работать с вложенными и условно включенными файлами ресурсов.
Обновите существующие ресурсы или преобразуйте их в Visual C++.
Импортировать графические ресурсы в текущий файл ресурсов или экспортировать их из него.
Включать общие или доступные только для чтения идентификаторы (символы), которые нельзя изменить с помощью среды разработки.
Включите ресурсы в исполняемый файл ( .exe или .dll ), который не нуждается в редактировании (или не следует изменять), например общие ресурсы между несколькими проектами.
Включать типы ресурсов, не поддерживаемые средой разработки.
Использование файлов скриптов ресурсов
Перед созданием и добавлением новых ресурсов в проект необходимо сначала создать файл скрипта ресурсов (RC).
файл скрипта ресурсов можно добавить только в существующий проект, загруженный в Visual Studio IDE. Нельзя создать автономный скрипт ресурсов за пределами проекта, хотя файлы шаблона ресурсов (RCT) можно создавать в любое время.
Класс ResourceWriter
Вместо использования для создания файлов ресурсов утилиты Resgen можно написать специальную, позволяющую это делать программу. Класс ResourceWriter из пространства имен System.Resources служит для создания бинарных файлов ресурсов, а класс ResXResourceWriter — для создания файлов ресурсов на базе XML. Оба эти класса поддерживают возможность добавления изображений и любых других сериализуемых объектов. В случае применения класса ResXResourceWriter потребуется сослаться на сборку System.Windows.Forms.
В следующем примере кода демонстрируется создание объекта ResXResourceWriter по имени rw в файле Demo.resx. После создания экземпляра с помощью метода AddResource() класса ResXResourceWriter можно приступать к добавлению набора ресурсов общим объемом до 2 Гбайт. Первый аргумент в AddResource() позволяет указывать имя ресурса, а второй — значение. Ресурс изображения можно добавлять за счет применения экземпляра класса Image. Чтобы можно было использовать класс Image, необходимо сослаться на сборку System.Drawing, а также добавить директиву using для открытия пространства имен System.Drawing.
Здесь объект Image создается за счет открытия файла logo.jpg, поэтому потребуется либо скопировать этот файл изображения в каталог исполняемой программы, либо указать полный путь к нему в аргументе метода ImageToFile(). Оператор using указывает, что ресурс изображения должен автоматически уничтожаться в конце блока using.
Далее в объект ResXResourceWriter добавляются простые строковые ресурсы. В конце метод Close() класса ResXResourceWriter автоматически вызывает ResXResourceWriter.Generate() для осуществления записи ресурсов в файл Demo.resx:
Запуск этой небольшой программы приведет к созданию файла ресурсов Demo.resx с изображением logo.jpg внутри.
Создание и использование шаблона ресурса
в Обозреватель решенийщелкните правой кнопкой мыши проект и выберите добавить>добавить новый элемент.
В области шаблоны: выберите файл шаблона ресурсов (. RCT).
Укажите имя и расположение для нового RCT -файла и нажмите кнопку Открыть.
новый rct -файл добавляется в проект и отображается в Обозреватель решений в папке ресурсов .
Дважды щелкните RCT -файл, чтобы открыть его в окне документа. Чтобы добавить ресурсы, щелкните правой кнопкой мыши файл в окне документа и выберите команду Добавить ресурс.
Вы можете настроить добавленные ресурсы и сохранить RCT – файл.
В области представление ресурсов щелкните правой кнопкой мыши RC -файл и выберите команду Добавить ресурс.
Щелкните знак «плюс» ( + ) рядом с ресурсом, чтобы развернуть узел ресурса и просмотреть доступные шаблоны для этого ресурса.
Дважды щелкните шаблон, который нужно использовать.
Добавленный ресурс можно изменить по мере необходимости в редакторе ресурсов.
Использование файлов ресурсов
Добавьте в этот проект созданный ранее файл ресурсов Demo.resx, открыв в окне Solution Explorer контекстное меню и выбрав в нем пункт Add --> Add Existing Item (Добавить --> Добавить существующий элемент). По умолчанию для свойства Build Action (Действие при компоновке) этого ресурса будет установлено значение Embedded Resource (Встраиваемый ресурс), указывающее, что этот ресурс должен встраиваться в выходную сборку.
Далее в параметрах проекта (за счет выбора Application --> Assembly information (Приложение --> Информация о сборке)) следует установить в качестве значения параметра Neutral Language (Нейтральный язык) основной язык:
Изменение значения этого параметра приведет к добавлению в файл assemblyinfо.cs атрибута [NeutralResourceLanguageAttribute], как показано ниже:
Установка значения для данного атрибута улучшит производительность ResourceManager, поскольку позволит ему быстрее отыскивать ресурсы для en-US, а также использовать их в качестве варианта по умолчанию. В этом атрибуте можно также указать место размещения используемого по умолчанию ресурса за счет применения второго параметра в конструкторе. С помощью перечисления UltimateResourceFallbackLocation можно указать, что он должен размещаться в главной сборке (значение MainAssembly) или же в подчиненной (значение Satellite).
После компоновки проекта можно просмотреть сгенерированную сборку утилитой ildasm и увидеть в манифесте атрибут, .mresource. Атрибут .mresource объявляет имя для ресурса в сборке. Если .mresource объявлен public (как в данном примере), это означает, что ресурс может экспортироваться из сборки и использоваться в классах других сборок. Если же .mresource объявлен private, это значит, что ресурс экспортироваться не может и доступен только в пределах данной сборки.
Для получения доступа к встроенному ресурсу используется класс ResourceManager, который находится в пространстве имен System.Resources. Конструктору этого класса в качестве аргумента можно передать имя сборки, в которой содержатся ресурсы.
В рассматриваемом примере ресурсы встроены в исполняемую сборку, поэтому во втором аргументе конструктору должен быть передан результат выполнения метода Assembly.GetExecutingAssembly(). В первом аргументе передается корневое имя ресурсов, состоящее из названия пространства имен и имени файла ресурсов, но без расширения resources. Как было показано ранее, это имя можно отобразить с помощью утилиты ildasm и просто удалить из него расширение resources. Имя можно также получить и программно с применением метода GetManifestResourceNames() класса System.Reflection.Assembly:
Для создания строго типизированного ресурса в редакторе управляемых ресурсов (Managed Resources Editor) можно изменить значение параметра Access Modifier (Модификатор доступа) с No Code Generation (Не генерировать никакой код) на Public (Общедоступный) или Internal (Внутренний). В случае установки значения Public генерируемый класс снабжается модификатором доступа public и тогда к нему возможен доступ из других сборок. При установке значения Internal генерируемый класс получает модификатор доступа internal и доступ к нему может осуществляться только изнутри сборки, в которой он находится.
Открытие ресурса манифеста
откройте проект в Visual Studio и перейдите к Обозреватель решений.
Разверните папку файлы ресурсов , а затем:
Чтобы открыть в текстовом редакторе, дважды щелкните .manifest файл.
Чтобы открыть в другом редакторе, щелкните .manifest файл правой кнопкой мыши и выберите команду Открыть с помощью. Укажите используемый редактор и нажмите кнопку Открыть.
Вы можете создать ресурсы для проекта, выполнив следующие действия.
Использование файла скрипта ресурсов.
Этот шаг необходим перед добавлением ресурсов.
Добавление ресурсов в проект и использование представление ресурсов.
Использование шаблона ресурса для создания настраиваемых ресурсов.
Использование шаблонов ресурсов
Шаблон ресурса — это настраиваемый ресурс, сохраненный в виде RCT-файла. Затем шаблон ресурсов служит отправной точкой для создания ресурсов. Шаблоны ресурсов сохраняют время в разработке дополнительных ресурсов или групп ресурсов, совместно использующих функции, такие как стандартные элементы управления или повторяющиеся элементы. Например, если вы хотите включить кнопку "Справка" с значком логотипа компании в несколько диалоговых окон, создайте новый шаблон диалогового окна и настройте его с помощью кнопки "Справка" и логотипа.
После настройки шаблона ресурса сохраните изменения в папке шаблона или в расположении, указанном в пути включения, чтобы новый шаблон ресурса отображался под типом ресурса в диалоговом окне Добавление ресурса . Теперь можно использовать новый шаблон ресурсов при необходимости.
Редактор ресурсов автоматически предоставляет уникальный идентификатор ресурса. При необходимости можно изменить свойства ресурсов .
Разместите зависящие от языка файлы шаблонов в подкаталогах основного каталога шаблонов. Например, файлы шаблонов только для английского языка попадают в .. \ < каталог >шаблонов ресурсов \ 1033.
Visual Studio ищет новые rct-файлы в \program files \ Microsoft Visual Studio < version >\вк\вкресаурцетемплатес, \program files \ Microsoft Visual Studio < version >\вк\вкресаурцетемплатес\ (например, lcid 1033 для английского языка) или в любом месте на путь включения. Если вы предпочитаете хранить RCT – файлы в другом расположении, необходимо добавить расположение в путь поиска включаемых файлов.
Создание файлов ресурсов
В файлах ресурсов могут храниться элементы, подобные изображениям и таблицам строк. В качестве ресурсного файла может быть обычный текстовый файл или файл с расширением .resX, в котором используется XML. В этой статье сначала рассматривается вариант простого текстового файла.
Ресурс, включающий в себя таблицу строк, может создаваться в обычном текстовом файле. В этом файле просто производится назначение строк ключам. Под ключом понимается имя, которое может использоваться в программе для получения соответствующего значения. В ключах и значениях допускается использовать пробелы.
Ниже показан пример создания простой таблицы строк:
Создание ресурсов
Ресурс можно создать как новый ресурс по умолчанию, что означает ресурс, который не основан на шаблоне, или как ресурс, шаблон которого находится после шаблона.
Используйте окно представление ресурсов для просмотра файлов ресурсов, включаемых в проекты. При раскрытии верхней папки, например проект1. RC, отображаются типы ресурсов в этом файле. Разверните каждый тип ресурса, чтобы отобразить отдельные ресурсы этого типа.
чтобы открыть окно представление ресурсов , перейдите в меню вид>другие Windows>представление ресурсов или нажмите клавиши Ctrl+Shift+E.
Можно также щелкнуть правой кнопкой мыши окно представление ресурсов , чтобы открыть контекстное меню команд, или дважды щелкнуть строку заголовка, чтобы закрепить и открепить окно. Щелкните правой кнопкой мыши строку заголовка команд, управляющих поведением окна. дополнительные сведения см. в разделе управление Windows.
представление ресурсов windows включает диалоговое окно добавление ресурса со следующими свойствами для добавления ресурсов в проект приложения Windows классическое приложение с + +:
Можно развернуть категории ресурсов курсора и диалогового окна, чтобы открыть дополнительные ресурсы, расположенные в . \ Microsoft Visual Studio < версия >\вк\вкресаурцетемплатес\ < LCID >\мфк.ркт. Если необходимо добавить RCT Files, поместите их сюда или укажите другой путь включения. Ресурсы, отображаемые на верхнем уровне элемента управления "дерево", являются ресурсами по умолчанию, предоставляемыми Visual Studio. Ресурсы в RCT – файлах отображаются на втором уровне в соответствующей категории. Число файлов RCT, которые можно добавить, не ограничено.
При создании нового ресурса Visual C++ присваивает ему уникальное имя, например IDD_Dialog1 . этот идентификатор ресурса можно настроить, изменив свойства ресурса либо в соответствующем редакторе ресурсов, либо в окно свойств.
Не указывайте имя или идентификатор ресурса, зарезервированного Visual Studio. Зарезервированные имена DESIGNINFO —, HWB и TEXTINCLUDE , а зарезервированный идентификатор — 255 .
Создание файла описания ресурсов
установите фокус на существующую папку проекта в Обозреватель решений, например MyProject.
не путайте папку проекта с папкой решения в Обозреватель решений. Если поместить фокус на папку решения , то вы не сможете добавлять новые элементы .
в меню выберите Project>добавить новый элемент.
Выберите папку Visual C++ и выберите файл ресурсов (. RC) в правой области.
Укажите имя файла скрипта ресурсов в текстовом поле имя и нажмите кнопку Открыть.
Утилита Resgen.exe
Для создания из ***.txt файла ресурсов можно воспользоваться специальной утилитой генерации файлов ресурсов Resgen.exe. Например, ввод следующей команды:
приведет к созданию файла MyResources.resources. Сгенерированный этой утилитой файл ресурсов далее можно либо добавить в сборку как внешний файл, либо вставить в сборку DLL или ЕХЕ. Утилита Resgen также поддерживает возможность создания файлов ресурсов в формате XML с расширением .resX. Применяется она очень просто:
Выполнение этой команды приведет к созданию XML-файла ресурсов по имени MyResources.resX.
Утилита Resgen поддерживает строго типизированные ресурсы. Строго типизированный ресурс представляется в виде класса, который получает доступ к ресурсам. Для создания такого класса в утилите Resgen предусмотрена опция /str:
После опции /str должен быть указан язык, пространство имен, имя класса и имя файла исходного кода, причем именно в таком порядке.
Читайте также: