Ресурсы в файле формата .Resx
Обновлен: Ноябрь 2007
Файл ресурсов в формате RESX состоит из записей XML, которые задают объекты и строки с использованием XML-тегов. Одно из преимуществ RESX-файла состоит в том, что его можно открыть в обычном текстовом редакторе (таком как "Блокнот" или Microsoft Word), а затем добавлять в него записи, подвергать анализу и другим операциям. При просмотре RESX-файла внедренный объект (например, рисунок) отображается в двоичном виде, если эти двоичные данные являются частью манифеста ресурса. За исключением двоичных данных, RESX-файл полностью доступен для чтения и изменения.
![]() |
---|
Не следует использовать файлы ресурсов для хранения паролей, секретных сведений или личных данных. |
В заголовке 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) сохраняемой двоичной информации, если объект состоит из двоичных данных.
![]() |
---|
Во всех 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