Need .NET code to execute only when in debug configuration

前端 未结 8 1055
闹比i
闹比i 2021-01-30 10:38

I have some code that access an API out on the web. One of the API\'s parameters allows me to let them know that I am testing.

I would like to only set this parameter in

8条回答
  •  甜味超标
    2021-01-30 11:24

    Solutions

    You can use one of the following—

    1: Conditional attribute

    The Conditional attribute indicates to compilers that a method call or attribute should be ignored unless a specified conditional compilation symbol is defined.

    Code example:

    [Conditional("DEBUG")]
    static void Method() { } 
    

    1b: Conditional attribute on local function (C# 9)

    Since C# 9, you may use attribute on a local function.

    Code example:

    static void Main(string[] args)
    {
        [Conditional("DEBUG")]
        static void Method() { }
    
        Method();
    }
    

    2: #if preprocessor directive

    When the C# compiler encounters an #if preprocessor directive, followed eventually by an #endif directive, it compiles the code between the directives only if the specified symbol is defined. Unlike C and C++, you cannot assign a numeric value to a symbol. The #if statement in C# is Boolean and only tests whether the symbol has been defined or not.

    Code example:

    #if DEBUG
        static int testCounter = 0;
    #endif 
    

    3: Debug.Write methods

    Debug.Write (and Debug.WriteLine) writes information about the debug to the trace listeners in the Listeners collection.

    See also Debug.WriteIf and Debug.WriteLineIf.

    Code example:

    Debug.Write("Something to write in Output window.");
    

    Notes

    Beware of using #if directive since it can produce unintended situations in non-Debug (e.g. Release) build. For example, see:

        string sth = null;
    #if DEBUG
        sth = "oh, hi!";
    #endif
        Console.WriteLine(sth);
    

    In this case, non-Debug build will print a blank message. But, this potentially may raise NullReferenceException in a different case.

    Read more

    • Eric Lippert. What's the difference between conditional compilation and the conditional attribute?
    • C# Programmer's Reference: Conditional Methods Tutorial (archive.org mirror)
    • Bill Wagner. Effective C#: 50 Specific Ways to Improve Your C# (book), chapter: Use Conditional Attributes Instead of #if
    • John Robbins. Assertions and Tracing in .NET (archive.org mirror)
    • Sam Allen. Dot Not Perls:
    • C# Conditional Attribute
    • C# Debug.Write

    See also

    There is also a tool, DebugView, which allow to capture debug information from external applications.

提交回复
热议问题