.Resx 文件格式中的资源

.resx 资源文件格式由 XML 项组成,这些 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 文件可能会变为无效。

下面的示例说明保存在 .resx 文件中的 Int32 对象以及一个位图对象(它保存实际 .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 类

您可以使用 ResXResourceWriter 类直接从代码创建 .resx 文件。 下面的示例阐释了如何创建一个 .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 类

您不能将 .resx 文件嵌入到运行时可执行文件中,也不能将其编译为附属程序集。 您必须使用资源文件生成器 (Resgen.exe) 将您的 .resx 文件转换为 .resources 文件。 有关更多信息,请参见 .Resources 文件格式中的资源

请参见

参考

Resgen.exe(资源文件生成器)

概念

创建资源文件

.Resources 文件格式中的资源