Рис. 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. Встроенные ресурсы
В предыдущем примере мы использовали тип 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).
Рис. 20.26. Автоматическое генерирование файлов *.resx в Visual Studio 2005
При добавлении вами ресурсов (например, изображений в PictureBox) с помощью визуальных инструментов проектирования этот файл *.resx будет изменяться автоматически. Более того, вы не должны вручную обновлять этот файл, чтобы указать пользовательские ресурсы, поскольку Visual Studio 2005 регенерирует этот файл при каждой компиляции проекта. Чтобы гарантировать правильную структуру этого файла, лучше всего позволить среде разработки самой управлять файлом *.resx формы.
Если вы захотите предложить пользовательский набор ресурсов, не связанный непосредственно с данной формой, просто добавьте новый файл *.resx (в нашем примере это файл MyCustomResources.resx), выбрав команду Project→Add New Item из меню (рис. 20.27).
Если открыть новый файл *.resx, соответствующий редактор позволит вставить необходимые строковые данные, изображения, звуковые фрагменты и другие ресурсы. Крайнее слева раскрывающееся меню позволит выбрать вид ресурса, который вы хотите добавить. Сначала добавьте новый строковый ресурс с именем WelcomeString, чтобы с его помощью задать то сообщение, которое вы хотите видеть (рис. 20.28).
Теперь добавьте изображение happyDude.bmp, сначала выбрав Images из крайнего меню, после этого – Add Existing File (рис. 20.29), а затем – указав файл happyDude.bmp в появившемся окне загрузки файла.
Читать дальше