禁止有条件方法的代码分析警告 [英] Suppress code analysis warnings for conditional methods

查看:275
本文介绍了禁止有条件方法的代码分析警告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对调用条件方法的代码运行代码分析(Visual Studio 2015)会导致未使用的本地(CA1804)或未使用的参数(CA1801)的警告。例如。 for:

 使用System.Diagnostics; 

命名空间ConsoleApplication1
{
类程序
{
[有条件(NEVER_DEFINED)]
static void日志b $ b {
System.Console.WriteLine(Demo conditional message logging:+ message);
}

static void Main(string [] args)
{
string message =当NEVER_DEFINE是#defined时,只记录日志。
Log(message);

方法(其他消息);
}

static void方法(string messageToLog)
{
Log(messageToLog);
}
}
}

代码分析结果: / p>


  • 警告CA1801



    Program.Main的参数'args' (string [])'从不使用。



    ConsoleApplication1 ... \Program.cs 14


  • 警告CA1804



    'Program.Main(string [])'声明一个类型为'string'的变量,'message',它从不使用,分配给。使用此变量或删除它。



    ConsoleApplication1 ... \Program.cs 15


  • 警告CA1801



    'Program.Method(string)'的参数'messageToLog'从不使用。删除参数或在方法体中使用它。



    ConsoleApplication1 ... \Program.cs 22




我考虑关于消息 messageTolog 的警告作为假阳性。是否有一种方法让代码分析使用参数来处理条件方法?

解决方案

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

 使用System.Diagnostics; 

命名空间ConsoleApplication1
{
类程序
{
[有条件(NEVER_DEFINED)]
[有条件(CODE_ANALYSIS)]
static void Log(string message)
{
System.Console.WriteLine(Demo conditional message logging:+ message);
}

static void Main(string [] args)
{
string message =当NEVER_DEFINE是#defined时,只记录此事。
Log(message);

方法(其他消息);
}

static void方法(string messageToLog)
{
Log(messageToLog);
}
}
}

> Log(string)被认为使用其参数,并且所有提供给它的参数和局部变量也被考虑使用。


Running code analysis (Visual Studio 2015) on code that calls Conditional methods causes warnings for unused locals (CA1804) or unused parameters (CA1801). E.g. for:

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);
        }
    }
}

Code Analysis results in:

  • Warning CA1801

    Parameter 'args' of 'Program.Main(string[])' is never used. Remove the parameter or use it in the method body.

    ConsoleApplication1 …\Program.cs 14

  • Warning CA1804

    'Program.Main(string[])' declares a variable, 'message', of type 'string', which is never used or is only assigned to. Use this variable or remove it.

    ConsoleApplication1 …\Program.cs 15

  • Warning CA1801

    Parameter 'messageToLog' of 'Program.Method(string)' is never used. Remove the parameter or use it in the method body.

    ConsoleApplication1 …\Program.cs 22

I consider the warnings about message and messageTolog as false positives. Is there a way to have the code analysis treat the conditional methods as using the parameters?

解决方案

Add the CODE_ANALYSIS conditional attribute to the called conditional method, e.g.:

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);
        }
    }
}

Now Log(string) is considered using its parameters and all parameters and local variables supplied to it are considered used as well.

这篇关于禁止有条件方法的代码分析警告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆