* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Ресурсы и ресурсные сборки
8 февраля 2009

Большинству готовых программ требуются ресурсы. Термином «ресурсы» в данном
контексте обозначают неисполняемые данные, внедренные в приложение. Пример
- различные наборы строк или изображений, отображаемых пользовательским
интерфейсом в зависимости от назначенной ему культуры. Упаковав подобные дан-
ные в ресурсный файл, вы получите возможность заменять их без перекомпиляции
приложения. В главе 8 рассказывается об автоматической генерации ресурсных
файлов и сборок при создании локализованных форм. Сейчас же речь пойдет о том,
как вручную создать ресурсный файл и встроить его в сборку. Вы также узнаете,
как создать сборку, содержащую только ресурсы, и научитесь программно извле-
кать код и объекты из таких сборок.
Создание ресурсных файлов
,N ET Framework включает приложение-пример ResEditor, которое позволяет созда-
вать ресурсные файлы, содержащие текст и изображения. Это приложение не ин-
тегрировано с IDE Visual Studio .NET, поэтому его следует запускать отдельно. На
самом деле оно поставляется в виде исходного текста, поэтому перед использова-
нием его необходимо скомпилировать. Файлы с исходным текстом вы найдете в
каталоге \FrameworkSDK\Samples\Tutorials\resourcesandlocalization\reseditor, кото-
рый расположен в каталоге, куда установлена Visual Studio .NET. Скомпилировать
ResEditor можно при помощи командного файла, записанного в тот же катаюг, либо
импортировав код в проект Visual Studio и скомпоновав его после соответствующей
настройки.
Примечание Если ResEditor компилируется с помощью командного файла, после-
дний необходимо запускать из командной строки Visual Studio .NET — это гаранти-
рует, что переменные окружения укажут путь к компилятору С#. Чтобы вызвать
окно командной строки Visual Studio .NET в Microsoft Windows XP, щелкните
Пуск\Программы\У15иа1 Studio .NET\Visual Studio .NET Tools.
Инструмент ResEditor (его интерфейс показан на рис. 9-1) генерирует файлы с
расширением .resources или .resx, содержащие строки и изображения.
ResEditor позволяет назначать типы и имена ресурсам, которые вы собираетесь
включить в файл. Создав запись ресурса, можно добавить к ней собственно ресурс
в виде строковых значений или изображений. Завершив формирование набор;а ре-
сурсов, сохраните файл в двоичном формате (в этом случае ему назначается расши-
рение .resources) или как XML-файл (тогда это будет .resx-файл).
> Создание файла ресурсов с помощью ResEditor
1. Скомпилируйте исходный текст ResEditor, если это еще не сделано. Файлы с
исходным текстом хранятся в каталоге FrarneworkSDK\Samples\TutoriaIs\resourcesandlocalization\
reseditor, который находится в каталоге, куда установлена
Visual Studio .NET.
2. Запустите ResEditor. Чтобы отредактировать существующий .resources- или .resx-
файл, выберите в меню File команду Open и найдите нужный файл.
3. В раскрывающемся списке Add выберите тип добавляемого ресурса. Введите в
поле Add имя нового ресурса и щелкните кнопку Add, чтобы добавить pecjpc в
файл.
4. В главном окне щелкните поле рядом с именем ресурса и задайте его значение.
Если это строковый ресурс, введите соответствующую строку, а если это изо-
бражение, укажите файл изображения.
5. Чтобы переименовать ресурс, выделите его щелчком мыши, введите в поле но-
вое имя и щелкните кнопку Rename, чтобы назначить ресурсу новое имя. Чтобы
удалить ресурс, выделите его и выберите команду Delete из меню Resources.
6. Завершив редактирование файла ресурсов, шелкните команду File\Save As, что-
бы сохранить его в формате .resources или .resx.
Созданный .resources- или .resx-файлы можно добавить к проекту, выбрав в меню
Project команду Add Existing Item.
Внедрение ресурсов в сборки
Созданный файл ресурсов внедряют в сборку, чтобы упаковать ресурсы вместе с
использующим их кодом — это улучшает переносимость приложения и уменьшает
его зависимость от внешних файлов. Для этого достаточно всего добавить файл ре-
сурсов к проекту приложения — добавленные ресурсы будут включены в сборку при
компиляции проекта.

^ Как внедрить ресурсы в сборку
1. Создайте файл ресурсов в формате .resources или .resx. Это удобно сделать с по-
мощью ResEditor.
2. В меню Project выберите команду Add Existing Item — откроется одноименное
окно.
3. Найдите файл ресурсов и щелкните кнопку Open — файл добавляется к проекту.
4. Из меню Build выберите команду Build, чтобы скомпилировать приложение, -
создается сборка, в которую внедряются выбранные ресурсы.
Создание ресурсных сборок
Допустимо создавать сборки, содержащие только ресурсы. Это удобно, когда ре-
сурсы нужно часто менять, но не хотелось бы перекомпилировать из-за этого все
приложение.
Чтобы создать ресурсную сборку, добавьте файл ресурсов в пустой проект. При
компоновке такого проекта создается сборка, содержащая исключительно ресурсы,
которые можно применять в других сборках, ссылаясь на них в коде. Как получить
доступ к ресурсам такой сборки — рассказано далее.
> Как создать ресурсную сборку
1. В меню File выберите команду New\Project — откроется окно New Project.
2. В этом окне выберите Visual Basic Projects или Visual C# Projects, затем Empty
Project и щелкните OK — будет создан пустой проект.
3. В меню Project выберите команду Add Existing Item, чтобы добавить к новому
проекту нужные файлы с ресурсами.
4. В окне Solution Explorer щелкните правой кнопкой этот проект и выберите из
контекстного меню команду Properties — откроется окно свойств проекта.
5. В меню Output Type выберите для проекта выходной тип Class Library.
6. В меню Build выберите В\л\\<1\<имя_проекта> — выполняется компиляция ре-
сурсов в сборку.
Создание сопутствующих сборок
При создании приложений с многоязычным интерфейсом удобно использовать для
каждой из поддерживаемых культур отдельный набор ресурсов. Это возможно бла-
годаря сопутствующим сборкам (satellite assemblies), позволяющих автоматически
загружать тот или иной набор ресурсов в зависимости от значения свойства Current-
UlCulture потока. Из главы 8 вы узнали, как автоматически генерировать файл ре-
сурсов для локализованной версии приложения, здесь же рассказывается о созда-
нии и подключении сопутствующих сборок для поддерживаемых культур.
В Visual Studio .NET создать сопутствующую сборку очень просто: достаточно
добавить к приложению соответствующим образов названный файл с альтернатив-
ным набором ресурсов — остальное сделает Visual Studio .NET при компиляции
проекта.
Имя файла ресурсов, встраиваемого в сопутствующую сборку, определяется
культурой, для поддержки которой эти ресурсы предназначены. Оно составляется
из имени файла с ресурсами для культуры по умолчанию, кода соответствующей
культуры и расширения. Так, если файл ресурсов называется My Resources, resx, файл
с ресурсами для поддержки немецкой культуры (для любых регионов) и именуется
MyResources.de.resx, а для люксембургского варианта немецкого языка — My Resources.
de-LU. resx.
Если добавить эти файлы к приложению, Visual Studio .NET автоматически
скомпилирует их в сопутствующие сборки и поместит их соответствующие катало-
ги. Во время выполнения CLR автоматически загружает специфичные для культу-
ры ресурсы, хранящиеся в этих файлах.
> Как создать сопутствующую сборку
1. Создайте файлы с альтернативными ресурсами для каждого из регионов, в кото-
рых предполагается использовать приложение.
2. Имя сопутствующей сборки должно включать имя файла ресурсов для культуры
по умолчанию и код культуры, разделенные точкой.
3. В меню Project выберите команду Add Exiting Item, чтобы добавить к проекту
созданные файлы.
4. Выберите из меню Build команду Build Solution, чтобы скомпоновать решение,
5. Файлы с ресурсами, специфичными для культуры, автоматически компилиру-
ются в сопутствующие сборки, которые записываются в соответствующие ката-
логи.
Извлечение ресурсов во время выполнения
Для извлечения внедренных ресурсов во время выполнения применяется класс
Resource Manager, управляющий доступом и извлечением ресурсов из сборок. Каж-
дый экземпляр класса Resource Manager связан со сборкой, содержащей ресурсы.
Конструктор класса Resource Manager требует два параметра: имя внедренного
файла ресурсов (без расширения) и сборку, в которой он находится. Созданный
экземпляр Resource Manager связывается с заданным файлом ресурсов, внедренным
в сборку, имя этого файла (опять же без расширения) становится именем простран-
ства имен, открывающего доступ к содержимому файла. Вот, например, как выгля-
дит ссылка на ресурсы из файла my Re sou rces.de-DE. resx, расположенные в про-
странстве имен Namespacel, — NamespaceLmyResources.
Второй параметр указывает сборку, в которой расположен данный файл ресур-
сов. Если это та же сборка, в которой находится объект, создающий экземпляр
ResourceManager, можно получить ссылку на нее через тип этого объекта, например:
Visual Basic .NET
' Создание экземпляра ResourceManager для доступа к ресурсам из
1 файла myResources. resx, расположенным в пространстве имен myNarnespace
1 и внедренным в ту же сборку, что и текущий объект.
1 Пример предполагает наличие оператора Imports System.Resources.
Dim myManager As New ResourceManager("myNamespace.myResources",
Me.GetType.Assembly)
Visual C#
// Создание экземпляра ResourceManager для доступа к ресурсам из
// файла myResources. resx, расположенным в пространстве имен myNarnespace
// и внедренным в ту же сборку, что и текущий объект,
// Пример предполагает наличие оператора, импортирующего System.Resources.
ResourceManager myManager = new ResourceManager
("myNamespace.myResources", this,GetType().Assembly);
Если требуемые ресурсы находятся в другой сборке (например, в отдельной ре-
сурсной сборке), перед извлечением ресурсов эту сборку необходимо загрузить.
Сборки загружают при помогли экземпляра класса Assembly из пространства имен
System. Reflection:
Visual Basic. NET
Пример предполагает наличие оператора Imports System.Resources
Dim myResources As System.Reflection.Assembly
Метод Assembly.Load принимает в качестве параметра
HMR загружаемой сборки.
myResources = System,Reflection.Assembly,Load("ResourceAssembly")
Dim myManager As New ResourceManager("ResourceAssembly,Resources",
myResources)
Visual C#
// Пример предполагает наличие оператора, импортирующего System.Resources
System.Reflection.Assembly myResojrces;
// Метод Assembly.Load принимает в качестве параметра
// имя загружаемой сборки.
myResources - System. Reflect ion. Assembly. Load("ResourceAssernbly");
ResourceManager myManager = new
ResourceManager("ResourceAssembly. Resources",
myResources):
Примечание Прежде чем загружать сборку, необходимо добавить к проекту ссылку
на нее.
Созданный объект-диспетчер ресурсов применяют для извлечения из файла ре-
сурсов строк и объектов, Для извлечения строк применяют метод ResourceManager.
GetString, требующий имя извлекаемого ресурса,
Метод Resource Manager. GelObject позволяет извлекать изображения и другие
объекты. Он возвращает объект с заданным именем. Извлеченный объект необхо-
димо явно преобразовать в требуемый тип. Вот как извлечь изображение:
Visual Basic .NET
Этот пример предполагает наличие экземпляра класса ResourceManager
с именем myManager.
Dim (nyImage As System. Drawing. Image
mylrriage = CType(myManager.GetObject("IinageResource"),
System.Drawing.Image)
Visual C#
// Этот поимер предполагает наличие экземпляра класса ResoyceManager
// с именем myManager.
System.Drawing.Image mylmage;
mylmage - (System. Drawing. Image)rr.yHanager.GetObject("Imageflesource");

Теги: .NET

Статьи по теме:

Объекты Color, Brush и Pen
Проверка на уровне формы
Применение переменных ссылочных типов
Специальные возможности и логотип «Certified for Windows»
Мемоизация (memoization)
Модификаторы доступа к членам
Динамические свойства
Применение компонента HelpProvider
Создание экземпляров элементов управления ActiveX
Реализация метода RemoveStale
Создание типизированного объекта DataSet с помощью XML Designer
Типы и пространства имен .NET
Редактор типов файлов
Замыкания (closure)
Настройка трассировочных переключателей
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Ресурсы и ресурсные сборки. Регион сайта: Москва и Санкт-Петербург