リソース ファイル ジェネレータ (Resgen.exe)

更新 : 2007 年 11 月

リソース ファイル ジェネレータは、テキスト (.txt または .restext) ファイルおよび XML ベースのリソース形式 (.resx) ファイルを共通言語ランタイムのバイナリ (.resources) ファイルに変換します。この .resources ファイルは、ランタイム バイナリ実行可能ファイルに埋め込んだり、サテライト アセンブリにコンパイルしたりできます。.resources ファイルを配置および取得する方法の詳細については、「アプリケーションのリソース」を参照してください。

Resgen.exe は次の変換処理を実行します。

  • .txt または .restext ファイルから .resources または .resx ファイルへの変換。

    ccec7sz1.alert_note(ja-jp,VS.90).gifメモ :

    拡張子 .restext は .NET Framework Version 2.0 で導入されました。.restext ファイルの形式は .txt ファイルの形式と同じです。ただし、拡張子 .restext を使用すると、リソース定義を含むテキスト ファイルをより簡単に識別できます。

  • .resources ファイルからテキスト ファイルまたは .resx ファイルへの変換。

  • .resx ファイルからテキスト ファイルまたは .resources ファイルへの変換。

resgen [parameters] [/compile]filename.extension [outputFilename.extension] [/str:lang[,namespace[,class[,file]]]]

パラメータ

引数

説明

filename.extension

変換元の入力ファイルの名前。extension には、次のいずれかを指定する必要があります。

.txt または .restext

.resources ファイルまたは .resx ファイルに変換するテキスト ファイルの拡張子を指定します。テキスト ファイルには、文字列リソースだけを含めることができます。

.resx

.resources ファイルまたはテキスト (.txt または .restext) ファイルに変換する、XML ベースのリソース ファイルの拡張子を指定します。

.resources

.resx ファイルまたはテキスト (.txt または .restext) ファイルに変換するリソース ファイルの拡張子を指定します。

outputFilename.extension

作成するリソース ファイルの名前。

.txt ファイル、.restext ファイル、または .resx ファイルから変換する場合、この引数は省略できます。テキスト ファイルまたは .resx ファイルを .resources ファイルに変換する場合は、拡張子 .resources を指定できます。outputFilename を指定しないと、入力ファイルを指定する引数 filenameに拡張子 .resources が追加され、そのファイルが filename を含むディレクトリに書き込まれます。

.resources ファイルから変換する場合、引数 outputFilename は必ず指定する必要があります。.resources ファイルを XML ベースのリソース ファイルに変換する場合は、拡張子 .resx を指定します。.resources ファイルをテキスト ファイルに変換する場合は、拡張子 .txt または .restext を指定します。.resources ファイルを .txt ファイルに変換するのは、.resource ファイルに文字列値だけが含まれている場合に限ります。

オプション

説明

/compile

複数の .resx ファイルまたはテキスト ファイルを指定して、一括した操作で複数の .resources ファイルに変換できるようにします。このオプションを指定しない場合、指定できる入力ファイル引数は 1 つだけです。

このオプションは、/str: オプションと一緒に使用することはできません。

/publicClass

厳密に型指定されたリソース クラスをパブリック クラスとして作成します。

/str: オプションを使用しない場合、このオプションは無視されます。

/r:assembly

型が assembly から読み込まれることを指定します。このオプションを指定すると、以前のバージョンの .resx ファイルの型は assembly の型を使用します。

/str:language[,namespace[,classname[,filename]]]

language オプションで指定されたプログラミング言語 (C# の場合は cs または C#、Visual Basic の場合は vb または visualbasic) で、厳密に型指定されたリソース クラス ファイルを作成します。namespace オプションを使用してプロジェクトの既定の名前空間を指定したり、classname オプションを使用して生成されるクラスの名前を指定したり、filename オプションを使用してクラス ファイルの名前を指定したりできます。

ccec7sz1.alert_note(ja-jp,VS.90).gifメモ :
.NET Framework Version 2.0 では、namespace が指定されていない場合、classname と filename は無視されます。

/str: オプションを指定すると使用できる入力ファイルは 1 つのみになるため、/compile オプションと一緒に使用することはできません。

namespace を指定して、classname を指定しない場合、出力ファイル名からクラス名が派生します (たとえば、ピリオドがアンダースコアに置き換えられます)。このため、厳密に型指定されたリソースが正常に機能しないことがあります。この問題を回避するには、クラス名と出力ファイル名の両方を指定します。

/usesourcepath

入力ファイルの現在のディレクトリを使用して相対ファイル パスを解決することを指定します。

解説

Resgen.exe は、次の 4 つのクラスで実装されているメソッドをラップすることによってファイルを変換します。

.NET Framework アプリケーションでは、ResXResourceWriter クラスが作成した .resx ファイルは直接使用できません。このファイルは、開発したアプリケーションに追加する前に、Resgen.exe で .resources ファイルに変換してください。記述したコードで上記のクラスを実装する方法の詳細については、それぞれの関連トピックを参照してください。

指定した入力ファイルを Resgen.exe で解析するためには、テキスト ファイルおよび .resx ファイルが正しい形式であることが必要です。

テキスト (.txt または .restext) ファイルには、文字列リソースだけを含めることができます。文字列リソースは、文字列を複数の言語に翻訳する必要があるアプリケーションを記述する場合に便利です。たとえば、適切な文字列リソースを使用することで、メニュー文字列を簡単に地域固有の文字列に変更できます。Resgen.exe は名前と値のペアを含むテキスト ファイルを読み取ります。名前はリソースを説明する文字列で、値はリソース文字列そのものです。次のように、名前と値のペアは、1 行に 1 ペアずつ指定する必要があります。

name=value

テキスト ファイルでは空の文字列を使用できることに注意してください。次に例を示します。

EmptyString=

テキスト ファイルに英文字だけでなく、セディーユ、ウムラウト、ティルダなどの発音区別符号が含まれている場合は、UTF-8 エンコーディングまたは Unicode エンコーディングで保存する必要があります。たとえば、エンコーディングが UTF-8 または Unicode でないテキスト ファイルを Resgen.exe で処理すると、拡張 ANSI 文字が削除されます。

Resgen.exe は、テキスト ファイルの中でリソース名が重複していないかどうかを確認します。テキスト ファイルの中でリソース名が重複している場合は、警告メッセージが出され、重複している名前は無視されます。テキスト ファイル形式の詳細については、「テキスト ファイル形式のリソース」を参照してください。

.resx リソース ファイル形式は、XML エントリから構成されます。テキスト ファイルの場合と同様に、これらの XML エントリの中に文字列リソースを指定できます。.resx ファイルがテキスト ファイルよりも優れている点は、オブジェクトの指定や埋め込みもできることです。.resx ファイルを表示してみると、埋め込みオブジェクト (画像など) のバイナリ形式を実際に参照できます (このバイナリ情報がリソース マニフェストの一部に含まれている場合)。テキスト ファイルと同様に、.resx ファイルはテキスト エディタ (メモ帳や Microsoft Word など) で開き、内容を書き込み、解析、操作できます。そのためには、XML のタグや .resx ファイルの構造を十分に知っておく必要があります。.resx ファイル形式の詳細については、「.Resx ファイル形式のリソース」を参照してください。

文字列以外の埋め込みオブジェクトを含む .resources ファイルを作成するには、そのオブジェクトを含む .resx ファイルを Resgen.exe で変換するか、ResourceWriter クラスで提供されているメソッドを使用して、そのオブジェクト リソースをコードから直接ファイルに追加する必要があります。オブジェクトを含む .resources ファイルを Resgen.exe でテキスト ファイルに変換する場合、文字列リソースはすべて正しく変換されますが、非文字列オブジェクトのデータ型も文字列としてファイルに書き込まれることになります。この変換処理では埋め込みオブジェクトが失われるため、リソースの取得時にエラーが発生したと報告されます。

.NET Framework Version 2.0 では、厳密に型指定されたリソースがサポートされています。厳密に型指定されたリソースのサポート機能では、静的な読み取り専用の (get) プロパティ セットを含むクラスを作成してリソースへのアクセスをカプセル化するため、ResourceManager クラスのメソッドを直接使用するのではなく、別の方法でリソースを使用します。基本的な機能は、StronglyTypedResourceBuilder クラスの機能をラップする、Resgen.exe の /str コマンド ライン オプションに用意されています。/str オプションを指定した場合の Resgen.exe の出力は、入力パラメータで参照されるリソースと一致する厳密に型指定されたプロパティを含むクラスです。このクラスは、処理されたファイルで使用できるリソースに対する、厳密に型指定された読み取り専用アクセスを提供します。

リソース ファイル ジェネレータ (Resgen.exe) ツールを使用すると、.resources ファイルと .resources ファイルにアクセスするための厳密に型指定されたラッパーを作成できます。厳密に型指定されたラッパーを作成するときは、生成されたコードの名前空間とクラス名に .resources ファイルの名前を合わせる必要があります (例 : MyNamespace.MyClass.resources)。ただし、リソース ファイル ジェネレータ (Resgen.exe) ツールでは、互換性のない名前の .resources ファイルを生成するオプションを指定することもできます。これを回避するには、リソース ファイル ジェネレータ (Resgen.exe) ツールが互換性のない名前を生成した後に出力ファイルの名前を変更します。

Resgen.exe で .resources ファイルを作成したら、アセンブリ リンカ (Al.exe) を使用して、そのリソースをランタイム バイナリ実行可能ファイルに埋め込むか、コンパイルしてサテライト アセンブリに組み込みます。

ccec7sz1.alert_note(ja-jp,VS.90).gifメモ :

何らかの理由により Resgen.exe が失敗した場合は、値 –1 が返されます。

ccec7sz1.alert_note(ja-jp,VS.90).gifメモ :

Resgen.exe では、厳密に型指定されたリソース クラスを生成するときに、.resx ファイル名に空白を含めることはできません。無効な文字はすべてアンダースコア (_) に置き換えられます。詳細については、「VerifyResourceName」を参照してください。

オプションを何も指定せずに次のコマンドを実行すると、Resgen.exe のコマンド構文とオプションが表示されます。

resgen

myResources.txt に含まれる名前と値のペアを読み取り、myResources.resources. という名前のバイナリ リソース ファイルを書き込むコマンドを次に示します。出力ファイル名が明白に指定されていないため、既定で、入力ファイルと同じ名前を受け取ります。

resgen myResources.txt 

myResources.restext に含まれる名前と値のペアを読み取り、yourResources.resources という名前のバイナリ リソース ファイルを書き込むコマンドを次に示します。

resgen myResources.restext yourResources.resources

XML ベースの入力ファイル myResources.resx を読み取り、myResources.resources という名前のバイナリ リソース ファイルを書き込むコマンドを次に示します。

resgen myResources.resx myResources.resources

バイナリ リソース ファイル myResources.resources を読み取り、myResources.resx という名前の XML ベースの出力ファイルを書き込むコマンドを次に示します。

resgen myResources.resources myResources.resx

myResources.resx という名前の XML ベースの入力ファイルを読み取り、myResources.txt および myResources.restext という名前のテキスト ファイルをそれぞれ書き込むコマンドを次に示します。.resx ファイルに埋め込みオブジェクトが含まれている場合は、テキスト ファイルに正しく変換されません。

resgen myResources.resx myResources.txt
resgen myResources.resx myResources.restext

XML ベースの入力ファイル myResources.resx を読み取り、myResources.resources という名前のバイナリ リソース ファイルを書き込むコマンドを次に示します。このコマンドは、入力ファイル内で参照されるリソースと一致する厳密に型指定されたプロパティを含む MyClass という名前のクラスと共に、MyFile.vb という Visual Basic ファイルも生成します。MyClass クラスは、Namespace1 という名前空間に含まれます。

resgen myResources.resx myResources.resources /str:C#,Namespace1,MyClass,MyFile.cs

参照

概念

アプリケーションのリソース

参照

.NET Framework ツール

System.Resources.Tools

アセンブリ リンカ (Al.exe)

SDK のコマンド プロンプト

その他の技術情報

エンコーディングとローカリゼーション