stylecop/fxcop 10-名前空間レベルでのみメッセージを適切に抑制するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/6386902

質問

FXCOP 10は次のことについて不平を言っています。

using XYZ.Blah; //CA1709 - "XYZ"
using Xyz.Blah; //No complaint.

using XylophoneSuperDuperLongFullName.Blah; //I don't want to have a long full name for my company name.

問題は... XYZが略語であるため、私の会社名がすべての大文字に表示されたいということです。名前の長いバージョンは、便利な名前空間になるには長すぎます。マイクロソフトは、頭字語が2文字しかないため、この種のものを逃げます。

using MS.Something; //No Complaint.
using Microsoft.SomethingElse; //No Complaint.

それで、私はAを追加することを検討していました SuppressMessageAttribute この警告を抑制する。しかし、この1つのインスタンスにのみ影響するように、適切に適切に行う方法(またはどこに固執するかさえ)かはわかりません。他の間違いをキャッチしたいので、その名前空間内の何も抑制したくありません。 MSDNとGoogleが検索したことを見ましたが、このインスタンスを特にターゲットにする方法を示すものは何も見つかりません。私が見つけた最も近いのはscope = "namespace"でしたが、それが実際の名前空間名に影響することを意味するかどうか、またはその名前空間内のすべてに影響するかどうかはわかりませんでした。

役に立ちましたか?

解決

MSDN -CA1709:識別子は正しくケースを付ける必要があります:

独自の命名規則がある場合、または識別子が会社の名前やテクノロジーの名前を表している場合、この警告を抑制することは安全です。

また、Code Analysis Custom Dictionaryに特定の用語、略語、頭字語を追加することもできます。カスタム辞書で指定された用語は、この規則の違反を引き起こしません。詳細については、次の方法を参照してください。コード分析辞書をカスタマイズしてください。


そうは言っても、メッセージを抑制するために正当化されたと感じたら、それは本当に難しくありません。 fxcopで10右クリックして、抑制するメッセージをクリックして、> suppless-messageまたはコピー>モジュールレベルの抑制メッセージとしてコピーします。

配置する必要があります SuppressMessageAttribute適切な場所にs。単一の場所を抑制する属性は、たとえば、メソッド、フィールド、プロパティ、またはクラスの上に、その場所に配置する必要があります。

例では、属性を配置する特定の場所はありません(デフォルトでは、 [module: SuppressMessage(...)]. 。これは、ファイルに固有のモジュールレベルの抑制(たとえば、ファイルに固有のリソースに)である場合、ファイルの上部に属していることを示す良い兆候です。または、おそらく、GlobalSuppressions.csファイルに属します。

using System.Diagnostics.CodeAnalysis;

[module: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", Justification = "Because I said so!", MessageId = "XYZ", Scope = "namespace", Target = "XYZ.Blah")]

短くすることもできます CheckId あなたが望むならプロパティですが、CA1709が何を意味するのかを知るのは良いことです。気分が悪い場合は、これも機能します。

using System.Diagnostics.CodeAnalysis;

[module: SuppressMessage("Microsoft.Naming", "CA1709", Justification = "Because I said so!", MessageId = "XYZ", Scope = "namespace", Target = "XYZ.Blah")]

そして最後に...ビルドに「code_analysis」シンボルを含めない限り、これはすべて無益です。プロパティに移動> [ビルド]を作成し、条件付きコンパイルシンボルを追加します。

他のヒント

アキョニョンはすべて上記のものであることを意図していません .NET命名規則. 。例えば HttpResponse

から 大文字の規則:

頭字語のケーシングは、頭字語の長さに依存します。すべての頭字語は、少なくとも2文字の長さです。これらのガイドラインの目的のために、頭字語がちょうど2文字である場合、それは短い頭字語と見なされます。 3人以上の文字の頭字語は、長い頭字語です。

次のガイドラインでは、短い頭字語と長い頭字語の適切なケーシングを指定します。識別子ケーシングルールは、頭字語のケーシングルールよりも優先されます。

ラクダに覆われた識別子の最初の単語を除き、2文字の頭字語の両方の文字を大文字にします。

DBRATEという名前のプロパティは、Pascalケースの識別子の最初の単語として使用される短い頭字語(DB)の例です。 iOCHANNELという名前のパラメーターは、ラクダを介した識別子の最初の単語として使用される短い頭字語(IO)の例です。

ラクダに覆われた識別子の最初の単語を除き、3つ以上の文字を持つ頭字語の最初の文字のみを大文字化します。

XMLWriterという名前のクラスは、Pascalケースの識別子の最初の単語として使用される長い頭字語の例です。 htmlreaderという名前のパラメーターは、ラクダに覆われた識別子の最初の単語として使用される長い頭字語の例です。

StyleCop経由で名前をチェックしていた場合は、使用できます stylecop+ (カスタムルール)構成可能な略語リストをサポートします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top