.Resx ファイル形式のリソース
.resx リソース ファイル形式は、オブジェクトと文字列を XML タグで囲んで指定する XML エントリから構成されます。.resx ファイルの利点の 1 つは、テキスト エディタ (ノートパッドや 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 ファイルを作成できます。リソースの 1 つとして 1 個の .jpg ファイルを含んでいる .resx ファイルの作成方法を次の例で示します。まず、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 ファイル形式のリソース」を参照してください。