Need .NET code to execute only when in debug configuration

前端 未结 8 924
闹比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:07

    yes, wrap the code in

    #if DEBUG
    // do debug only stuff 
    #else
    // do non DEBUG stuff
    #endif
    

    Google for "C# compilation symbols"

    Visual Studio automatically defines DEBUG when you are in the debug configuration. You can define any symbols you want (look at your project's properties, the build tab). Beware that abusing preprocessor directives is a bad idea, it can lead to code that is very difficult to read/maintain.

    0 讨论(0)
  • 2021-01-30 11:09

    I had this same problem and the solution I went with is using:

    if (System.Diagnostics.Debugger.IsAttached)
    {
        // Code here
    }
    

    This means that technically in production you can attach a debugger and get that piece of code to run.

    0 讨论(0)
  • 2021-01-30 11:09

    This works in asp.net:

    if (System.Web.HttpContext.Current.IsDebuggingEnabled)
        //send email to developer;
    else
        //send email to customer;
    

    from Rick Strahl @ Detecting-ASPNET-Debug-mode

    0 讨论(0)
  • 2021-01-30 11:11
    public int Method ()
    {
    #if DEBUG 
       // do something 
    #endif
    }
    
    0 讨论(0)
  • 2021-01-30 11:23

    The following is safe to use:

    var isDebug = false;
    #if DEBUG
        isDebug = System.Diagnostics.Debugger.IsAttached;
    #endif
    
    if (isDebug) {
        // Do something
    }
    
    0 讨论(0)
  • 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.

    0 讨论(0)
提交回复
热议问题