2010-07-02 44 views
6

分散在我正在开发的一个软件项目中,有许多代码是为了调试和实用目的而编写的。在我编译我的代码之前,我想要一种方法来选择这些代码块是否应该包含到我的编译中(这不需要导航代码注释)。我怎样才能做到这一点?如何从编译中轻松排除某些代码行?

我在C#编程和使用Microsoft Visual Studio 2010

回答

13

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

+1

+1。 IMVHO,这是最干净的方式。 – womp 2010-07-02 17:16:57

+0

我并不熟悉这个条件调试属性,非常漂亮。 – CrimsonX 2010-07-02 17:35:04

+0

相同 - 没有听说过这个。太好了! – RQDQ 2010-07-02 20:23:06

7

,当你想在你的编译块我会建议封闭在#ifdef SOMETHING#endif你的块,然后定义在您的项目设置SOMETHING

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

的代码,如果测试是在代码的顶部限定仅编译。许多开发人员使用#define DEBUG,因此他们可以启用调试代码,并通过更改顶部的一行来重新删除它。

+7

如果您在Visual Studio中使用构建配置,则Debug构建配置(默认情况下)会定义DEBUG,而Release构建配置则不会。无需手动定义它们。 – Toby 2010-07-02 17:03:30

1

如果他们是进行调试,那么唯一可以接受的解决方案是围绕这样的代码:

#ifdef DEBUG 

#endif 

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

+1

当然还有其他可以接受的解决方案。条件属性做同样的事情,并且(对我来说)至少比指令更好,因为根据我的经验,指令往往会混淆第三方代码分析工具。 – womp 2010-07-02 17:11:05

1

您可能需要考虑将这些调试功能完全移出类 - 让您的类在“调试”和“发布”模式之间“更改形状”可能非常令人头痛,并且可能难以诊断问题。

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

3

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

相关问题