.resx 資源文件格式由 XML 項組成,這些 XML 項指定 XML 標記內的對象和字符串。.resx 文件的一個(gè)優(yōu)點(diǎn)在于,當用文本編輯器(例如記事本或 Microsoft Word)打開(kāi)此類(lèi)文件時(shí),可以對其進(jìn)行寫(xiě)入、分析和操縱。查看 .resx 文件時(shí),如果嵌入對象(如圖片)的二進(jìn)制格式是資源清單的一部分,則可以實(shí)際看見(jiàn)此二進(jìn)制信息。除了此類(lèi)二進(jìn)制信息之外,.resx 文件是完全可讀和可維護的。
![]() |
|---|
| 不要使用資源文件來(lái)存儲密碼、安全敏感信息或保密數據。 |
.resx 文件包含一組標準的標頭信息,這些信息描述資源項的格式并指定用來(lái)分析數據的 XML 版本控制信息。下面的示例表明 .resx 文件中一組典型標頭語(yǔ)句的大致情形。
<?xml version="1.0" encoding="utf-8"?><root><xsd:schema id="root" xmlns="" 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>
緊接著(zhù)標頭信息,每一項均被描述為名稱(chēng)/值對,這非常類(lèi)似于在 .txt 文件中指定字符串的方式。.resx 格式中的名稱(chēng)/值對在 XML 代碼中打包,它描述字符串或對象值。當字符串被添加到 .resx 文件中時(shí),該字符串的名稱(chēng)被嵌入在 <data> 標記中,并且值包括在 <value> 標記內,如以下示例所示。
<data name="string1"><value>hello</value></data>
當一個(gè)對象被插入到 .resx 文件中時(shí),使用相同的 <data> 和 <value> 標記來(lái)描述該項,但 <data> 標記要包括類(lèi)型或 MIME 類(lèi)型說(shuō)明符。類(lèi)型說(shuō)明符保留所保存對象的數據類(lèi)型。如果對象由二進(jìn)制數據組成,則 MIME 類(lèi)型說(shuō)明符保持所存儲的二進(jìn)制信息的基類(lèi)型 (Base64)。
![]() |
|---|
| 所有 .resx 文件都使用二進(jìn)制序列化格式化程序來(lái)生成和分析特定類(lèi)型的二進(jìn)制數據。因此,如果對象的二進(jìn)制序列化格式出現了不可兼容的變化,.resx 文件可能會(huì )變?yōu)闊o(wú)效。 |
下面的示例說(shuō)明保存在 .resx 文件中的 Int32 對象以及一個(gè)位圖對象(它保存實(shí)際 .gif 文件中的二進(jìn)制信息)的開(kāi)頭。
<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 類(lèi)
您可以使用 ResXResourceWriter 類(lèi)直接從代碼創(chuàng )建 .resx 文件。下面的示例闡釋了如何創(chuàng )建一個(gè) .resx 文件,該文件將一個(gè) .jpg 文件作為文件內的資源之一存儲。首先,使用 Image.FromFile 方法創(chuàng )建圖像。接下來(lái),創(chuàng )建具有唯一文件名的 ResXResourceWriter。為要添加到該文件的每一圖像調用 ResXResourceWriter.AddResource 方法。最后,調用 ResXResourceWriter.Close 方法以將圖像信息寫(xiě)入到資源文件中并關(guān)閉 ResXResourceWriter。
Imports SystemImports System.DrawingImports System.ResourcesPublic Class SampleClassPublic Sub Main()Dim img As ImageDim rsxw As ResXResourceWriterimg = Image.FromFile("en-AU.jpg")rsxw = new ResXResourceWriter("en-AU.resx")rsxw.AddResource("en-AU.jpg",img)rsxw.Close()End SubEnd 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 文件。但為了避免破壞該文件,操縱文件時(shí)要小心,不要修改存儲在該文件中的任何二進(jìn)制信息。
如果您需要檢索 .resx 文件中的資源的名稱(chēng)和值,請使用 ResXResourceReader。有關(guān)說(shuō)明如何為指定文件創(chuàng )建 ResXResourceReader,循環(huán)訪(fǎng)問(wèn)文件并輸出資源名稱(chēng)和值的代碼示例,請參見(jiàn) ResXResourceReader 類(lèi)。
您不能將 .resx 文件嵌入到運行庫可執行文件中,也不能將其編譯為附屬程序集。您必須使用資源文件生成器 (Resgen.exe) 將您的 .resx 文件轉換為 .resources 文件。有關(guān)更多信息,請參見(jiàn) .Resources 文件格式中的資源。




