C# 如何为方法的所有调用方禁用代码分析规则

C# 如何为方法的所有调用方禁用代码分析规则,c#,roslyn,C#,Roslyn,鉴于这两类: 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(使用名称)。我不希望这样,因为该字符串用于长期自定义序列化,并且永远不会更改

鉴于这两类:

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(使用名称)。我不希望这样,因为该字符串用于长期自定义序列化,并且永远不会更改(如果我们决定更改
Prop
的名称,我们将不会更改该字符串)。我不想在程序集级别甚至类级别禁用该规则。还有成百上千的呼叫者,比如
Def
,所以我想要一些不需要我对呼叫者做任何事情的东西

是否有某种[ExcludeParameterFromCodeAnalysis]我可以将
propertyName
param从所有或某些代码分析中排除

以下是我希望存在的概念,或其变体:

public class Abc
{
   public static void Method([SuppressMessageForCallers("CA1507")]string propertyName) { }
}

public class Def
{
   public int Prop { get; }

   public void Method2() { Abc.Method("Prop"); }
}

对于有关此警告的
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将在左侧排水沟的灯泡或螺丝刀菜单上提供该选项。

我认为,当参数名称为
paramName
propertyName
2时,此规则仅为1。因此,让我们更改参数:

public class Abc
{
   public static void Method(string propertySerializationName) { }
}

1即使您不知道或无法猜到哪个特定分析器实现了警告,在存储库中搜索特定代码(
CA1507
)似乎也有助于您在没有太多误报的情况下找到它们


2奇怪的是,如果您添加了一个新的
常量字符串Bob
,该字符串设置为
“Prop”
,而您使用它,它甚至不会触发名为
parameterName

的参数,它会给您一个警告吗?这是一个解决方案(没有警告),但是如果有一个解决方案只涉及改变Abc,那是理想的。如果我正确理解OP,他们会要求对
Method
(或者,至少在
Abc
内部)做些事情,这样看起来像
Method2
的任何新代码都不需要做任何事情,比如这些pragmas.Beautiful。我绞尽脑汁想找到一个简单的单线解决方案,这是100%的成功。