Поделиться через


Ресурсы в приложениях .NET

Почти каждое прикладное приложение производственного качества должно использовать ресурсы. Ресурс — это любые неисполнимые данные, которые логически развертываются с помощью приложения. Ресурс может отображаться в приложении как сообщения об ошибках или как часть пользовательского интерфейса. Ресурсы могут содержать данные в нескольких формах, включая строки, изображения и сохраненные объекты. (Чтобы записать сохраненные объекты в файл ресурсов, объекты должны быть сериализуемыми.) Хранение данных в файле ресурсов позволяет изменять данные без повторной компиляции всего приложения. Он также позволяет хранить данные в одном расположении и устранять необходимость полагаться на жестко закодированные данные, хранящиеся в нескольких расположениях.

.NET обеспечивает комплексную поддержку создания и локализации ресурсов. Кроме того, .NET поддерживает простую модель упаковки и развертывания локализованных ресурсов.

Создание и локализация ресурсов

В не локализованном приложении файлы ресурсов можно использовать в качестве репозитория для данных приложения, особенно для строк, которые могут быть жестко закодированы в нескольких расположениях в исходном коде. Чаще всего вы создаете ресурсы как текстовые (.txt) или XML-файлы (RESX) и используете Resgen.exe (генератор файлов ресурсов) для компиляции в двоичные файлы ресурсов. Затем эти файлы можно внедрить в исполняемый файл приложения компилятором языка. Дополнительные сведения о создании ресурсов см. в разделе "Создание файлов ресурсов".

Вы также можете локализовать ресурсы приложения для определённых культур. Это позволяет создавать локализованные (переведенные) версии приложений. При разработке приложения, использующего локализованные ресурсы, вы назначаете культуру, которая служит нейтральной или резервной культурой, ресурсы которой используются, если подходящие ресурсы недоступны. Как правило, ресурсы нейтральной культуры хранятся в исполняемом файле приложения. Оставшиеся ресурсы для отдельных локализованных культур хранятся в автономных сателлитных сборках. Дополнительные сведения см. в разделе "Создание вспомогательных сборок".

Упаковка и развертывание ресурсов

Вы развертываете локализованные ресурсы приложения в спутниковых сборках. Спутниковая сборка содержит ресурсы одной культуры; он не содержит код приложения. В модели развертывания спутниковых сборок создается приложение с одной сборкой по умолчанию (которая обычно является основной) и одной спутниковой сборкой для каждой культуры, которую поддерживает приложение. Поскольку сателлитные сборки не являются частью основной сборки, вы можете легко заменить или обновить ресурсы, соответствующие определенной культуре, без замены основной сборки приложения.

Тщательно определите, какие ресурсы будут создавать сборку ресурсов вашего приложения по умолчанию. Так как она является частью основной сборки, любые изменения в ней потребуют замены основной сборки. Если вы не предоставите ресурс по умолчанию, будет выдано исключение, когда процесс резервного обеспечения ресурса попытается его найти. В хорошо разработанном приложении использование ресурсов никогда не должно вызывать исключение.

Дополнительные сведения см. в статье " Упаковка и развертывание ресурсов ".

Извлечение ресурсов

Во время выполнения приложение загружает соответствующие локализованные ресурсы на уровне потока на основе культуры, указанной в свойстве CultureInfo.CurrentUICulture. Значение этого свойства определяется следующим образом:

  • Путем непосредственного назначения объекта, представляющего локализованную культуру, свойству CultureInfo.

  • Если язык и региональные параметры не назначены явным образом, то извлекается язык и региональные параметры пользовательского интерфейса потока по умолчанию из свойства CultureInfo.DefaultThreadCurrentUICulture.

  • Если язык и региональные параметры пользовательского интерфейса потока по умолчанию не назначены явным образом, извлекая язык и региональные параметры для текущего пользователя на локальном компьютере. Реализации .NET, работающие в Windows, делают это путем вызова функции Windows GetUserDefaultUILanguage .

Дополнительные сведения о том, как задан текущий язык и региональные параметры пользовательского интерфейса, см. на справочных страницах CultureInfo и CultureInfo.CurrentUICulture.

Затем можно получить ресурсы для текущей культуры пользовательского интерфейса или для определенной культуры с помощью класса System.Resources.ResourceManager. Хотя класс ResourceManager чаще всего используется для получения ресурсов, пространство имен System.Resources содержит дополнительные типы, которые также можно использовать для получения ресурсов. К ним относятся:

  • Класс ResourceReader , позволяющий перечислять ресурсы, внедренные в сборку или хранящиеся в автономном двоичном файле .resources. Полезно, если вы не знаете точные имена ресурсов, доступных во время выполнения.

  • Класс ResXResourceReader , позволяющий извлекать ресурсы из XML-файла (RESX).

  • Класс ResourceSet, позволяющий получить ресурсы определённой культуры, не соблюдая правила взаимной замены. Ресурсы можно хранить в сборке или автономном двоичном файле .resources. Вы также можете разработать IResourceReader реализацию, которая позволяет использовать ResourceSet класс для получения ресурсов из другого источника.

  • Класс ResXResourceSet , который позволяет извлекать все элементы в XML-файле ресурсов в память.

См. также