代码之家  ›  专栏  ›  技术社区  ›  Ronnie Overby

只需要在调试配置中执行.NET代码

  •  31
  • Ronnie Overby  · 技术社区  · 14 年前

    是否有一种基于构建配置的自动方法?

    8 回复  |  直到 11 年前
        1
  •  111
  •   Dariusz Woźniak    4 年前

    解决

    您可以使用以下选项之一

    1: Conditional 属性

    Conditional 属性向编译器指示应忽略方法调用或属性,除非定义了指定的条件编译符号。

    代码示例:

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

    1b类: 有条件的

    由于C#9,您可以在局部函数上使用属性。

    代码示例:

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

    #if 预处理器指令

    当C编译器遇到 #if preprocessor directive ,后跟一个#endif指令,仅当定义了指定的符号时,它才编译指令之间的代码。与C和C++不同,不能将数值分配给符号。C#中的#if语句是布尔语句,只测试符号是否已定义。

    代码示例:

    #if DEBUG
        static int testCounter = 0;
    #endif 
    

    Debug.Write 方法

    Debug.Write Debug.WriteLine )将有关调试的信息写入 Listeners

    另请参见 Debug.WriteIf Debug.WriteLineIf .

    代码示例:

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

    小心使用 #如果 指令,因为它可以在非调试(如发布)构建中产生意外情况。例如,请参见:

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

    NullReferenceException 在另一种情况下。

    另请参见

    DebugView

        2
  •  33
  •   Matt Greer    14 年前

    是的,把代码包起来

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

    谷歌 "C# compilation symbols"

    Visual Studio自动定义 DEBUG 当您处于调试配置时。可以定义所需的任何符号(查看项目的“属性”、“生成”选项卡)。请注意,滥用预处理器指令是个坏主意,它会导致代码很难读取/维护。

        3
  •  16
  •   James Hulse    14 年前

    我也遇到了同样的问题,解决方法是:

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

        4
  •  7
  •   George Johnston    14 年前

    除了#if#endif指令外,还可以使用条件属性。如果用属性标记方法

    [Conditional("Debug")]
    

    只有在应用程序以调试模式构建时,才会编译和运行它。正如在下面的注释中所指出的,只有当方法具有void返回类型时,这些方法才起作用。

        5
  •  3
  •   Edward Leno    14 年前

    http://www.bigresource.com/Tracker/Track-vb-lwDKSoETwZ/

    更好的解释是: http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx

    // preprocessor_if.cs
    #define DEBUG
    #define MYTEST
    using System;
    public class MyClass 
    {
        static void Main() 
        {
    #if (DEBUG && !MYTEST)
            Console.WriteLine("DEBUG is defined");
    #elif (!DEBUG && MYTEST)
            Console.WriteLine("MYTEST is defined");
    #elif (DEBUG && MYTEST)
            Console.WriteLine("DEBUG and MYTEST are defined");
    #else
            Console.WriteLine("DEBUG and MYTEST are not defined");
    #endif
        }
    }
    
        6
  •  2
  •   David_001    14 年前
    public int Method ()
    {
    #if DEBUG 
       // do something 
    #endif
    }
    
        7
  •  2
  •   Jason Williams    9 年前

    以下是安全使用:

    var isDebug = false;
    #if DEBUG
        isDebug = System.Diagnostics.Debugger.IsAttached;
    #endif
    
    if (isDebug) {
        // Do something
    }
    
        8
  •  0
  •   JerryOL    7 年前

    这在asp.net中起作用:

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

    里克·斯特拉尔的来信@ Detecting-ASPNET-Debug-mode