私はこのようなものから始まるクラスを持っています:
namespace Tools.Builders
{
internal abstract class Builder
{
[SuppressMessage("Microsoft.Maintainability", "CA1502")]
private static readonly Dictionary<string, Func<ILogger, Builder>> _builders =
new Dictionary<string, Func<ILogger, Builder>>
{
{ "1", (x) => {return new BuilderType1(x);} },
{ "2", (x) => {return new BuilderType2(x);} },
{ "3", (x) => {return new BuilderType3(x);} },
{ "4", (x) => {return new BuilderType4(x);} },
{ "5", (x) => {return new BuilderType5(x);} },
{ "6", (x) => {return new BuilderType6(x);} },
{ "7", (x) => {return new BuilderType7(x);} },
{ "8", (x) => {return new BuilderType8(x);} },
{ "9", (x) => {return new BuilderType9(x);} },
};
protected ILogger _logger;
protected Builder(ILogger logger)
{
_logger = logger;
}
//...
これにより、「Builder.Builder()の循環的複雑度が...」という形式のCA1502警告が発生します(これは、この種のイニシャライザーの既知の問題です)。しかし、私の問題は、警告を抑制できないことです。SuppressMessageAttributeをコード内のさまざまな場所に配置しようとしましたが、無視されます。誰か提案はありますか?
コンストラクターをターゲットとして指定するアセンブリレベルの属性を使用することで、このメッセージを抑制することができました。
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("Microsoft.Maintainability",
"CA1502:AvoidExcessiveComplexity",
Scope = "member",
Target = "Tools.Builders.Builder.#.cctor()")]
この属性は、アセンブリ内の任意のコードファイルに配置できます。
後で参照できるように、[エラーリスト]ウィンドウ(またはVS2013以前の[コード分析]ウィンドウ)でCA警告を右クリックし、[抑制]-> [抑制ファイル内]を選択してこの属性を生成しました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加