给出这两个类:
public class Abc
{
public static void Method(string propertyName) { }
}
public class Def
{
public int Prop { get; }
public void Method2() { Abc.Method("Prop"); }
}
按原样,将为Method2
触发Roslyn规则CA1507(使用nameof)。我不希望那样,因为该字符串用于长期的自定义序列化,并且永远无法更改(如果我们决定更改Prop
的名称,则不会更改该字符串)。我不想在程序集级别甚至类级别禁用该规则。还有Def
之类的数百个呼叫者,所以我想要的东西不需要我对呼叫者做任何事情。
我是否可以使用某种[ExcludeParameterFromCodeAnalysis]放在propertyName
参数中,以将其排除在全部或某些代码分析之外?
这是我希望存在的概念,或它的某些变体:
public class Abc
{
public static void Method([SuppressMessageForCallers("CA1507")]string propertyName) { }
}
public class Def
{
public int Prop { get; }
public void Method2() { Abc.Method("Prop"); }
}
答案 0 :(得分:3)
我相信,当您的参数名称为paramName
或propertyName
2 时,此规则仅triggers 1 。因此,让我们更改参数:
public class Abc
{
public static void Method(string propertySerializationName) { }
}
1 即使您不知道或无法猜测哪个特定的分析器实施了警告,看起来也像在roslyn-analyzers存储库中搜索特定的代码(CA1507
)应该可以帮助您找到没有太多误报的邮件。
2 很奇怪,它甚至似乎都没有在名为parameterName
的参数上触发。
答案 1 :(得分:0)
Abc.Method
声明与该警告无关,因为该警告不是在方法上(甚至在调用时),而是在文字本身上。
它可能很难看,但是可以用:
public class Abc
{
public static void Method(string propertyName) { }
}
public class Def
{
public int Prop { get; }
public void Method2()
{
#pragma warning disable CA1507 - use nameof
Abc.Method("Prop");
#pragma warning restore CA1507 - use nameof
}
}
Visual Studio将在左侧装订线的灯泡或螺丝刀菜单上提供该功能。