抑制条件方法的代码分析警告

Suppress code analysis warnings for conditional methods

运行 对调用 Conditional 方法的代码的代码分析 (Visual Studio 2015) 会导致针对未使用的局部变量 (CA1804) 或未使用的参数 (CA1801) 的警告。例如。对于:

using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        [Conditional ("NEVER_DEFINED")]
        static void Log(string message)
        {
            System.Console.WriteLine("Demo conditional message logging: " + message);
        }

        static void Main(string[] args)
        {
            string message = "Only log this when `NEVER_DEFINE` is #defined";
            Log(message);

            Method("other message");
        }

        static void Method(string messageToLog)
        {
            Log(messageToLog);
        }
    }
}

代码分析结果:

我认为关于 messagemessageTolog 的警告是误报。有没有办法让代码分析将条件方法视为使用参数?

您可以在System.Diagnostics.CodeAnalysis中使用[SuppressMessageAttribute]。但是,您必须将它应用于每个调用 Conditional 方法的方法(或将其应用于更广泛的范围);例如:

[System.Diagnostics.CodeAnalysis.SuppressMessage ("Microsoft.Performance", "CA1804")]
static void Main(…)
{
    …
}

[System.Diagnostics.CodeAnalysis.SuppressMessage ("Microsoft.Performance", "CA1801")]
static void Method(…)
{
    …
}

CODE_ANALYSIS条件属性添加到被调用的条件方法中,例如:

using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        [Conditional ("NEVER_DEFINED")]
        [Conditional ("CODE_ANALYSIS")]
        static void Log(string message)
        {
            System.Console.WriteLine("Demo conditional message logging: " + message);
        }

        static void Main(string[] args)
        {
            string message = "Only log this when `NEVER_DEFINE` is #defined";
            Log(message);

            Method("other message");
        }

        static void Method(string messageToLog)
        {
            Log(messageToLog);
        }
    }
}

现在 Log(string) 被视为使用其参数,并且所有提供给它的参数和局部变量也被视为已使用。