Ресурсы в файле формата .Resx

Обновлен: Ноябрь 2007

Файл ресурсов в формате RESX состоит из записей XML, которые задают объекты и строки с использованием XML-тегов. Одно из преимуществ RESX-файла состоит в том, что его можно открыть в обычном текстовом редакторе (таком как "Блокнот" или Microsoft Word), а затем добавлять в него записи, подвергать анализу и другим операциям. При просмотре RESX-файла внедренный объект (например, рисунок) отображается в двоичном виде, если эти двоичные данные являются частью манифеста ресурса. За исключением двоичных данных, RESX-файл полностью доступен для чтения и изменения.

ekyft91f.alert_note(ru-ru,VS.90).gifПримечание.

Не следует использовать файлы ресурсов для хранения паролей, секретных сведений или личных данных.

В заголовке RESX-файла содержится стандартный набор сведений, который описывает формат записей ресурсов и включает сведения об управлении версиями для XML, применяемые для анализа данных. В следующем примере показан типичный набор инструкций заголовка RESX-файла.

<?xml version="1.0" encoding="utf-8"?>
<root>
    <xsd:schema id="root"  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="data">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0"
                    msdata:Ordinal="2" />
                </xsd:sequence>
                    <xsd:attribute name="name" type="xsd:string" />
                    <xsd:attribute name="type" type="xsd:string" />
                    <xsd:attribute name="mimetype" type="xsd:string" />
            </xsd:complexType>
        </xsd:element>

После заголовка следуют записи, каждая из которых представляет собой пару имя-значение, аналогично тому, как задаются строки в TXT-файле. Пара имя-значение в формате RESX заключена в код XML, который описывает значения объектов или строк. При добавлении в RESX-файл новой строки ее имя внедряется в тег <data>, а значение — в тег <value>, как в следующем примере:

    <data name="string1">
        <value>hello</value>
    </data>

Когда в RESX-файл вставляется объект, для описания записи используются те же теги <data> и <value>, но тег <data> содержит спецификатор типа или спецификатор типа MIME. Спецификатор типа содержит тип данных сохраняемого объекта. Спецификатор типа MIME задает базовый тип (Base64) сохраняемой двоичной информации, если объект состоит из двоичных данных.

ekyft91f.alert_note(ru-ru,VS.90).gifПримечание.

Во всех RESX-файлах для создания и анализа двоичных данных заданного типа используется форматтер двоичной сериализации. В результате, если формат двоичной сериализации для объекта изменится недопустимым образом, RESX-файл может стать недействительным.

В следующем примере показан объект типа Int32, сохраненный в RESX-файле, и начало объекта растрового изображения, содержащего двоичные данные из фактического GIF-файла.

    <data name="i1" type="System.Int32, mscorlib">
        <value>20</value>
    </data>

    <data name="flag" type="System.Drawing.Bitmap, System.Drawing,   
    Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
    mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>
            AAEAAAD/////AQAAAAAAAAAMAgAAADtTeX…
        </value>
    </data>

Использование класса ResXResourceWriter

Для создания RESX-файла непосредственно из кода можно использовать класс ResXResourceWriter. В следующем примере показано, как создать RESX-файл, в котором в качестве одного из ресурсов хранится JPG-файл. Прежде всего, нужно создать изображение с помощью метода Image.FromFile. Затем создается объект ResXResourceWriter с уникальным именем файла. Для каждого изображения, которое требуется добавить в файл, вызывается метод ResXResourceWriter.AddResource. Наконец, для записи данных изображений в файл ресурсов нужно вызвать метод ResXResourceWriter.Close, а затем закрыть объект ResXResourceWriter.

Imports System
Imports System.Drawing
Imports System.Resources

Public Class SampleClass

    Public Sub Main()
        Dim img As Image
        Dim rsxw As ResXResourceWriter
        img = Image.FromFile("en-AU.jpg")
        rsxw = new ResXResourceWriter("en-AU.resx")
        rsxw.AddResource("en-AU.jpg",img)
        rsxw.Close()
    End Sub
End Class
using System;
using System.Drawing;
using System.Resources;
 
public class SampleClass
{
    public static void Main() 
    {
        Image img = Image.FromFile("en-AU.jpg");
        ResXResourceWriter rsxw = new ResXResourceWriter("en-AU.resx"); 
        rsxw.AddResource("en-AU.jpg",img);
        rsxw.Close();
    }
}

Кроме того, можно изменять непосредственно RESX-файл. Однако следует соблюдать осторожность и избегать изменения содержащихся в файле двоичных данных: это может привести к его повреждению.

Для извлечения имен и значений ресурсов из RESX-файла можно использовать класс ResXResourceReader. Пример кода, который иллюстрирует создание объекта ResXResourceReader для заданного файла, просмотр файла и печать имен и значений ресурсов, см. в разделе ResXResourceReader Class.

RESX-файл нельзя внедрить в исполняемый файл или скомпилировать во вспомогательную сборку. Необходимо преобразовать RESX-файл в файл с расширением RESOURCES с помощью генератора файлов ресурсов (Resgen.exe). Дополнительные сведения содержатся в разделе Ресурсы в файле формата .Resources.

См. также

Основные понятия

Создание файлов ресурсов

Ресурсы в файле формата .Resources

Ссылки

Генератор файлов ресурсов (Resgen.exe)