私がすべての通貨の列挙を持っているとしましょう:
_public enum CurrencyType
{
/// <summary>
/// United Arab Emirates dirham
/// </summary>
[EnumMember]
AED = 784,
/// <summary>
/// Afghan afghani
/// </summary>
[EnumMember]
AFN = 971,
/// <summary>
/// Albanian lek
/// </summary>
[EnumMember]
ALL = 008,
...
}
_
VS 2015のコード分析では、個々のメンバーごとに CA1709 の100件の違反について文句を言い続けます。
これはそれ自体が有用なルールであり、無効にしたくありません。しかし、CurrencyType
はパブリックであり、他の多くのプロジェクトで使用されているため、この特定のケースではあまり役に立ちません。
メッセージを抑制できます。ただし、VSは、個々のメンバーごとにそれを抑制することのみを提供します。つまり、コードが乱雑になる100 [SuppressMessage(...)]
行があります。
100 [SuppressMessage(...)]
を記述せずに、このプロジェクトの他のすべてのコードでは抑制せずに、すべてのCurrencyType
メンバーですべてのCA1709を抑制する方法はありますか?
Scope
のSuppressMessageAttribute
パラメーターがありますが、そのパラメーターについてのドキュメントは不明確です。両方を配置してみました
_[SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", Scope = "type", Justification = "Currency codes are defined in ISO standard.")]
_
そして
_[SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", Scope = "member", Justification = "Currency codes are defined in ISO standard.")]
_
CurrencyType
自体に。どちらも機能しません。
この場合、クラス全体または列挙型のルールを抑制し、その抑制をすべてのメンバーに適用する方法はありません。
しかし、あなたができることは、CodeAnalaysisDictionary.xml
、それをEnumを含むプロジェクトに追加し、その「ビルドアクション」プロパティをCodeAnalysisDictionary
に設定します。
これを設定したら、次のように辞書に省略形と大文字小文字の例外を追加できます。
<Dictionary>
<Acronyms>
<CasingExceptions>
<Acronym>AED</Acronym>
<Acronym>AFN</Acronym>
<Acronym>ALL</Acronym>
<Acronym>...</Acronym>
</CasingExceptions>
</Acronyms>
</Dictionary>
これらの例外は、これらの頭字語が含まれているコードのすべての要素に適用されますが、CA1709警告が表示されなくなります。
辞書ファイルを使用して設定できる例外の詳細については、ドキュメントを参照してください。
いいえ、個別の抑制なしにこれを行う方法はありません。 Scope
引数を使用すると、コード分析エンジンはTarget
引数が何を表すかを知ることができます。たとえば、ターゲットが「A.B.C」の場合、それはA.B.C
という名前の名前空間、または名前空間A.B
のC
という名前のクラスを参照していますか? 「スコープ」は「TargetKind」のような名前で表現した方がいいかもしれませんが、残念ながら実際には何を表すかは変わりません。
この場合の抑制の醜さを考慮して、それらをGlobalSuppressions.cs
に生成し、次にCurrencyTypeMemberNameSuppressions.cs
などの別のファイルに移動することができます。これを(オプションで)ファイルの下のファイルとしてネストできます。 Visual Studioのプロジェクト構造にCurrencyType
列挙型を含めます。理想的ではありませんが、現時点では不良ロットの最良の選択です...
この答え も参照してください。
#pragma warning disable CA1709
?再アクティブ化するには、#pragma warning restore CA1709
ただし、この列挙型がファイル内の唯一のタイプである場合は、省略できます。