14

ファイルを「埋め込みリソース」としてビルドすると、プロジェクト内のパスに応じて、Visual Studio によってアセンブリ内の名前が付けられます。例えば。私のファイル at にcases/2013.1/colours.xmlは、のような散発的なアンダースコアを含むリソース名が付けられていますcases._2013._1.colours.xml

私の質問は - この名前はどのように決定されますか? ルールは文書化されていますか? Visual Studio が使用するメソッドはどこにありますか?

編集:私はこれらのものを多数扱っているので、ファイルパスからリソース名を推測できると助かります。

4

3 に答える 3

19

MSDN ライブラリの記事に記載されているように、Resgen.exe はStronglyTypedResourceBuilder.VerifyResourceName() メソッドによって実装されたルールを使用します。MSDN ライブラリの内容をコピーします。

key パラメータが空の文字列 ("") の場合、1 つのアンダースコア文字 (_) で構成される文字列が返されます。key パラメーターが空の文字列でない場合、VerifyResourceName メソッドは、プロバイダー パラメーターで指定された言語に基づいて、文字列内の各文字を一連の無効なトークンと比較します。文字列内の無効な文字はアンダースコア文字に置き換えられます。アンダースコアに置き換えられる文字は次のとおりです。

' ' (スペース)、U+00A0 (改行なしスペース)、'.' (ピリオド)、',' (カンマ)、';' (セミコロン)、'|'、'~'、'@'、'#'、'%'、'^'、'&'、'*'、'+'、'-'、'/'、'\ '、'<'、'>'、'?'、'['、']'、'('、')'、'{'、'}'、'"' (引用符)、''' (アポストロフィ)、 ':'、 と '!'。


厳密に型指定されたリソースでは、言語キーワード (if、for など) をリソース キー名として使用できません。ただし、System.CodeDom デザイン パターンでは、キーワードの前にアンダースコア文字を付けることで、言語キーワードを使用できます。VerifyResourceName メソッドは、CreateValidIdentifier メソッドを呼び出して、この設計を適用します。たとえば、for などの言語キーワードと同じリソース名を使用すると、その名前は、生成された厳密に型指定されたリソース クラスで _for として表示されます。

StronglyTypedResourceBuilder クラスのソース コードを見ると、ドキュメントは正確です。

于 2013-05-11T13:33:55.097 に答える
1

Visual Studio 自体がどのように名前を生成するかについてのドキュメントは知りませんが、通常、スタンドアロン ビルド用に resgen.exe で使用されるアルゴリズムと互換性があると想定します。ただし、説明されているアルゴリズムはあなたの例では機能しません (私が誤解していない限り、のクラ​​ス名が生成cases._013._.coloursされます)。したがって、VS が正しく実装していないか、説明した特定のケースに対して resgen ドキュメントが不正確です。

于 2013-02-06T01:40:33.080 に答える
0

あなたの例に適用できる簡単なルールは...

cases/2013.1/colours.xml

1) 「/」を「.」に置き換えます。

cases.2013.1.colours.xml

2) ドットで区切られた文字列の各項目について、項目が数字で始まる場合は、先頭にアンダースコアを追加します。

cases => cases
2013 => _2013
1 => _1
colours => colours
xml => xml

3) ドットで区切られた文字列を再構築します。

cases._2013._1.colours.xml
于 2013-05-11T13:04:42.090 に答える