Чтение онлайн

ЖАНРЫ

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Троелсен Эндрю

Шрифт:

1. Создание файла *.resx в котором задаются пары имен и значений для каждого ресурса приложения в формате XML-представления данных.

2. Использование утилиты командной строки resgen.exe для преобразования XML-файла *.resx в двоичный эквивалент (файл *.resources).

3. Использование флага /resource компилятора C# для того, чтобы встроить двоичный файл *.resources в компоновочный блок.

Как вы можете догадаться, в Visual Studio 2006 эти шаги автоматизированы. Чуть позже вы узнаете, как указанная среда разработки может вам в этом помочь. А пока давайте выясним, как сгенерировать и встроить ресурсы .NET в командной строке.

Пространство имен System.Resources

Ключом к пониманию формата ресурсов .NET является понимание

типов, определенных в пространстве имен System.Resources. Соответствующее множество типов обеспечивает программные средства чтения и записи файлов *.resx (в формате XML) и *.resources (в двоичном формате), а также получения ресурсов, встроенных в компоновочный блок. Описания базовых типов этого пространства имен предлагаются в табл. 20.10.

Таблица 20.10. Члены пространства имен System.Resources

Члены Описание
ResourceReader ResourceWriter Позволяют читать и записывать данные двоичных файлов
ResXResourceReader ResXResourceWriter Позволяют читать и записывать данные XML-файлов *.resx
ResourceManager Позволяет программно получить встроенные ресурсы данного компоновочного блока 

Создание файла *.resx программными средствами

Как было отмечено выше, файл *.resx содержит XML-данные, представляющие пары имен и значений для каждого ресурса приложения. Класс ResXResourceWriter предлагает набор членов, с помощью которых вы можете создать файл *.resx, добавить в него двоичные и строковые ресурсы и сохранить их. Для примера мы создадим простое приложение (ResXWriter), которое будет генерировать файл *.resx, содержащий информацию, необходимую для загрузки файла happyDude.bmp (впервые упомянутого в примере DraggingImages) и некоторого строкового ресурса. Графический интерфейс пользователя будет образован единственным типом Button (рис. 20.22).

Рис. 20.22. Приложение ResX

Обработчик события Click для Button добавляет happyDude.bmp и строковый ресурс в файл *.resx, который сохраняется на локальном диске C.

private void btnGenResX_Click(object sender, EventArgs e) {

 // Создание объекта, записывающего данные resx,

 // и указание файла для записи.

 ResXResourceWriter w = new ResXResourceWriter(@"C:\ResXForm.resx");

 // Добавление изображения и строки.

 Image i = new Bitmap ("happyDude.bmp");

 w.AddResource("happyDude", i);

 w.AddResource("welcomeString", "Приветствие формата ресурсов");

 // Фиксация файла.

 w.Generate;

 w.Close;

}

Здесь наибольший интерес представляет собой член ResXResourceWriter.AddResource. Этот метод является перегруженным, чтобы вы имели возможность вставить как двоичные данные (такие, как изображение happyDude.bmp), так и текстовые (наподобие указанной выше строки). Обратите внимание на то, что каждый из вариантов предполагает использование двух параметров: имени соответствующего ресурса в файле *.resx и непосредственно данных. Метод Generate фиксирует информацию в файле. В результате вы получаете XML-описание ресурсов изображения и строки. Для проверки откройте новый файл ResXForm.resx с помощью текстового редактора (рис. 20.23).

Рис. 20.23. XML-представление *.resx

Создание

файла *.resources

Имея файл *.resx, вы можете использовать утилиту resgen.exe, чтобы сгенерировать двоичный эквивалент этого файла. Для этого откройте окно командной строки Visual Studio 2005, перейдите в корневой каталог вашего диска C и выполните следующую команду.

resgen resxform.resx resxform.resources

Теперь вы можете открыть новый файл *.resources с помощью Visual Studio 2005, чтобы увидеть данные в двоичном формате (рис. 20.24).

Рис. 20.24. Двоичное представление *.resources

Добавление файла *.resources в компоновочный блок .NET

Теперь можно встроить файл *.resources в компоновочный блок.NET, используя опцию /resources компилятора командной строки C#. Для примера скопируйте соответствующие файлы Program.cs, Form1.cs и Form1.Designer.cs в корневой каталог вашего диска C, откройте окно командной строки Visual Studio 2005 и выполните следующую команду.

csc /resource:resxform.resources /r:System.Drawing.dll *.cs

Если открыть созданный в результате этого компоновочный блок с помощью ildasm.exe, вы увидите, что манифест соответствующим образом обновлен, как показано на рис. 20.25.

Рис. 20.25. Встроенные ресурсы

Работа с ResourceWriter

В предыдущем примере мы использовали тип ResXResourceWriter, чтобы сгенерировать XML-файл, содержащий пары имен и значений для каждого ресурса приложения. Полученный в результате файл *.resx был затем обработан утилитой resgen.exe. Наконец, с помощью флага /resource компилятора C# файл *. resources был встроен в компоновочный блок. Но дело в том. что создавать файл *.resx совсем не обязательно (хотя наличие XML-представления ресурсов может оказаться полезным, поскольку оно вполне пригодно для анализа). Если вам не нужен файл *.resx, вы можете использовать тип ResourceWriter, с помощью которого двоичный файл *.resources можно создать непосредственно.

private void GenerateResourceFile {

 // Создание нового файла *.resources.

 ResourceWriter rw;

 rw = new ResourceWriter(@"C:\myResources.resources");

 // Добавление одного изображения и одной строки.

 rw.AddResource("happyDude", new Bitmap("happyDude.bmp"));

 rw.AddResource("welcomeString", "Приветствие формата ресурсов.");

 rw.Generate;

 rw.Close;

}

Полученный файл *.resources можно добавить в компоновочный блок, используя опцию /resources компилятора.

csc /resource:myresources.resources *.cs

Исходный код. Проект ResXWriter размещен в подкаталоге, соответствующем главе 20.

Генерирование ресурсов в Visual Studio 2005

С файлами *.resx и *.resources можно, конечно, работать вручную в командной строке, но Visual Studio 2005 предлагает средства автоматизации создания и встраивания ресурсов в проект. Для примера создайте новое приложение Windows Forms, назвав его MyResourcesWinApp. Открыв для созданного проекта окно Solution Explorer, вы увидите, что теперь с каждой формой в вашем приложении автоматически связывается файл *.resx (рис. 20.26).

Поделиться с друзьями: