8

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

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

4

7 回答 7

13

将该属性添加[Conditional("DEBUG")]到您只想在调试版本中执行的方法上。请参阅此处了解更多详细信息。

于 2010-07-02T17:01:36.527 回答
8

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

于 2010-07-02T16:57:53.070 回答
7

您需要预处理器指令或条件编译语句。您可以在此处阅读有关它们的信息。

该链接中的一个示例:

#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,因此他们可以启用调试代码并只需更改顶部的那一行即可再次将其删除。

于 2010-07-02T16:58:09.607 回答
3

考虑使用Debug 类来有条件地记录、断言等。这样做有很多优点。您可以选择在运行时记录(或不记录)。它们将您限制为(大部分)不改变行为的行为,解决了@STW 的一些(有效)问题。它们允许使用第三方日志工具。

于 2010-07-02T17:02:27.623 回答
1

您可以使用带有#if 的预处理器指令

于 2010-07-02T16:58:55.917 回答
1

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

#ifdef DEBUG

#endif

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

于 2010-07-02T17:00:14.610 回答
1

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

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

于 2010-07-02T17:01:14.017 回答