MSDN ライブラリの記事に記載されているように、Resgen.exe はStronglyTypedResourceBuilder.VerifyResourceName() メソッドによって実装されたルールを使用します。MSDN ライブラリの内容をコピーします。
key パラメータが空の文字列 ("") の場合、1 つのアンダースコア文字 (_) で構成される文字列が返されます。key パラメーターが空の文字列でない場合、VerifyResourceName メソッドは、プロバイダー パラメーターで指定された言語に基づいて、文字列内の各文字を一連の無効なトークンと比較します。文字列内の無効な文字はアンダースコア文字に置き換えられます。アンダースコアに置き換えられる文字は次のとおりです。
' ' (スペース)、U+00A0 (改行なしスペース)、'.' (ピリオド)、',' (カンマ)、';' (セミコロン)、'|'、'~'、'@'、'#'、'%'、'^'、'&'、'*'、'+'、'-'、'/'、'\ '、'<'、'>'、'?'、'['、']'、'('、')'、'{'、'}'、'"' (引用符)、''' (アポストロフィ)、 ':'、 と '!'。
注
厳密に型指定されたリソースでは、言語キーワード (if、for など) をリソース キー名として使用できません。ただし、System.CodeDom デザイン パターンでは、キーワードの前にアンダースコア文字を付けることで、言語キーワードを使用できます。VerifyResourceName メソッドは、CreateValidIdentifier メソッドを呼び出して、この設計を適用します。たとえば、for などの言語キーワードと同じリソース名を使用すると、その名前は、生成された厳密に型指定されたリソース クラスで _for として表示されます。
StronglyTypedResourceBuilder クラスのソース コードを見ると、ドキュメントは正確です。