Ресурсы сборки
53WPF --- Элементы управления WPF --- Ресурсы сборки
Ресурсы сборки в приложении WPF работают, по сути, точно так же, как и в других приложениях .NET. Базовая концепция заключается в добавлении файла к проекту, чтобы среда Visual Studio могла встроить его в скомпилированный файл приложения EXE или DLL. Главное отличие между ресурсами сборки WPF и ресурсами в других приложениях связано с системой адресации, которая используется для ссылки на них.
Ресурсы сборки также еще называют двоичными ресурсами, потому что они встраиваются в скомпилированную сборку (EXE- или DLL-файл проекта) в виде "непрозрачного" большого двоичного объекта.
Именно с использованием двоичных ресурсов всякий раз, когда компилируется приложение, все XAML-файлы в проекте преобразуются в более удобные для синтаксического анализа BAML-файлы. Далее эти BAML-файлы вставляются в сборку в виде отдельных ресурсов. Собственные ресурсы добавляются так же легко.
Добавление ресурсов
Для создания собственных ресурсов следует добавить в проект нужный файл и установить для него свойство 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.
Чтобы просмотреть встроенные ресурсы в скомпилированной сборке, можно воспользоваться дизассемблером. К сожалению, .NET-средство ildasm такую функциональность не поддерживает. Тем не менее, по адресу http://www.red-gate.com/products/reflector доступна для загрузки бесплатная и гораздо более элегантная утилита под названием .NET Reflector, которая позволяет исследовать ресурсы.