如何从编译中轻松排除某些代码行?

时间:2010-07-02 16:55:26

标签: c# visual-studio debugging shortcuts

我正在研究的软件项目中散布着许多代码行,这些代码是为调试和实用目的而编写的。在编译代码之前,我想要一种方法来选择是否应该将这些代码块包含在我的编译中(不需要导航代码注释掉)。我怎么能这样做?

我正在用c#编程并使用Microsoft Visual Studio 2010。

7 个答案:

答案 0 :(得分:13)

[Conditional("DEBUG")]弹出到您只想在调试版本中执行的方法。有关详细信息,请参阅here

答案 1 :(得分:7)

我建议您将块放在#ifdef SOMETHING#endif中,然后在要在编译中包含该块时在项目设置中定义SOMETHING

答案 2 :(得分:7)

您需要预处理程序指令或条件编译语句。您可以阅读here

该链接的一个例子:

#define TEST
using System;
public class MyClass 
{ 
    public static void Main() 
    {
        #if (TEST)
            Console.WriteLine("TEST is defined"); 
        #else
            Console.WriteLine("TEST is not defined");
        #endif
    }
}

只有在代码顶部定义TEST时才编译代码。许多开发人员使用#define DEBUG,因此他们可以启用调试代码并通过更改顶部的一行来再次删除它。

答案 3 :(得分:3)

考虑使用the Debug class来有条件地记录,断言等。这有很多优点。您可以选择在运行时记录(或不记录)。它们限制了(主要)非行为改变行为,解决了某些@ STW(有效)问题。它们允许使用第三方日志工具。

答案 4 :(得分:1)

您可以使用preprocessor directives w / #if

答案 5 :(得分:1)

如果它们用于调试,那么唯一可接受的解决方案是用以下代码包围这些代码:

#ifdef DEBUG

#endif

这可确保在调试模式下编译时包含代码,但在发布模式下将其排除。

答案 6 :(得分:1)

您可能需要考虑将这些调试功能完全移出类 - 让您的类在调试和发布模式之间“改变形状”可能是一个真正的问题,并且很难诊断出问题。

您可以考虑创建一个单独的“Debug”程序集,其中包含所有调试助手 - 然后确保您可以将其从解决方案中排除,并在没有它的情况下成功构建。