web-dev-qa-db-ja.com

すべての型メンバーのコード分析メッセージを抑制する方法は?

私がすべての通貨の列挙を持っているとしましょう:

_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を抑制する方法はありますか?

ScopeSuppressMessageAttributeパラメーターがありますが、そのパラメーターについてのドキュメントは不明確です。両方を配置してみました

_[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自体に。どちらも機能しません。

16
penartur

この場合、クラス全体または列挙型のルールを抑制し、その抑制をすべてのメンバーに適用する方法はありません。

しかし、あなたができることは、CodeAnalaysisDictionary.xml、それをEnumを含むプロジェクトに追加し、その「ビルドアクション」プロパティをCodeAnalysisDictionaryに設定します。

enter image description here

これを設定したら、次のように辞書に省略形と大文字小文字の例外を追加できます。

<Dictionary>
      <Acronyms>
         <CasingExceptions>
            <Acronym>AED</Acronym>
            <Acronym>AFN</Acronym>
            <Acronym>ALL</Acronym>
            <Acronym>...</Acronym>
         </CasingExceptions>
      </Acronyms>
</Dictionary>

これらの例外は、これらの頭字語が含まれているコードのすべての要素に適用されますが、CA1709警告が表示されなくなります。

辞書ファイルを使用して設定できる例外の詳細については、ドキュメントを参照してください。

10
jessehouwing

いいえ、個別の抑制なしにこれを行う方法はありません。 Scope引数を使用すると、コード分析エンジンはTarget引数が何を表すかを知ることができます。たとえば、ターゲットが「A.B.C」の場合、それはA.B.Cという名前の名前空間、または名前空間A.BCという名前のクラスを参照していますか? 「スコープ」は「TargetKind」のような名前で表現した方がいいかもしれませんが、残念ながら実際には何を表すかは変わりません。

この場合の抑制の醜さを考慮して、それらをGlobalSuppressions.csに生成し、次にCurrencyTypeMemberNameSuppressions.csなどの別のファイルに移動することができます。これを(オプションで)ファイルの下のファイルとしてネストできます。 Visual Studioのプロジェクト構造にCurrencyType列挙型を含めます。理想的ではありませんが、現時点では不良ロットの最良の選択です...

この答え も参照してください。

6
Nicole Calinoiu

#pragma warning disable CA1709?再アクティブ化するには、#pragma warning restore CA1709ただし、この列挙型がファイル内の唯一のタイプである場合は、省略できます。

2
Dr.Gee