私は FxCop / マネージド コード分析チームで 3 年間開発者を務めていました。私の時代から状況が変わり、カスタム辞書の処理がどのように機能するかを正確に忘れていたため、これを理解するのにかなりの時間がかかりました. :)
エグゼクティブサマリー
簡単に言えば、C:\Program Files (x86)\Microsoft FxCop 1.36\CustomDictionary.xml からユーザー名、ユーザー名、UserName、および UserNames へのすべての参照を削除する必要があるということです。
通常、これは必須ではないためお勧めしませんが、バグであると思われるものを見つけたので、これが唯一の回避策です。
フルストーリー
わかりました、長い答えのために...
ルールには、次のように機能する 2 つの異なるチェックがあります。
A. 個別であるべき複合語をチェックする
- 識別子をトークンに分割: 例
FileName --> { "file", "name" }
- 隣接するトークンのペアごとにスペル チェックを行います。
- スペル チェックが成功した場合 (たとえば
filename
、有効な単語と見なされた場合)、
1 つの単語は 2 つのトークンとして表現されるべきではないため、潜在的な問題が見つかりました。
- ただし、カスタム ディクショナリ
<Term CompoundAlternate="FileName">filename</Term>
のセクションに a がある場合、それは単語ですが、デザイン ガイドラインを意味するものと見なされます (主に、ルールが存在する前のフレームワークの先行技術との一貫性への同意として)。と書かれるべきだと主張しているので、警告を抑制しなければなりません。<Compound>
filename
FileName
- また、ユーザー辞書
<Term>filename</Term>
のセクションにエントリがある場合<DiscreteExceptions>
、'filename' は単語ですが、別のコンテキストでは 'file' と 'name' の 2 つの単語である可能性があることを意味すると見なされます。たとえば、開始は単語ですが、ユーザーに変更DoSomethingOnSet
を
求めるのはDoSomethingOnset
ノイズになるため、警告を抑制しなければなりません。
B.複合語にする必要がある個別の単語を確認します。
- A.1 からトークンを取得し、カスタム ディクショナリ内の一連の複合用語に対して各トークンを個別にチェックします。
- 一致する場合は、ステップ A.4 の解釈に従って警告する必要があります。
warning: Username
should beUserName
がパート B で検出されることに注意してください。これは DiscreteExceptions セクションを参照しないため、そのセクションを変更しても警告を抑制することができません。問題は、デフォルトのカスタム ディクショナリに、 の正しい大文字と小文字の区別username
が alwaysであるというエントリがあることUserName
です。何らかの形で削除またはオーバーライドする必要があります。
不具合
理想的な解決策は、既定のユーザー辞書をそのままにSearchFxCopDir=false
して、プロジェクト ファイルで指定し、プロジェクトに使用する CustomDictionary.xml で必要な既定のユーザー辞書の部分のみをマージすることです。残念ながら、FxCop 1.36 は SearchFxCopDir ディレクティブを無視し、常に true として扱うため、これは機能しません。これはバグだと思いますが、ディレクティブが文書化されておらず、対応する UI がないため、意図的な変更である可能性もあります。正直わからない…
結論
FxCop は常にプロジェクト ユーザー辞書に加えて既定のユーザー辞書を使用するため、問題のエントリを既定のユーザー辞書から削除するしかありません。
機会があれば、現在のコード分析チームに連絡して、これが実際にバグであるかどうかを確認し、ここで報告します...