39

我的 C# 类中有这段代码。

#if DEBUG
        private const string BASE_URL = "http://www.a.com/";
#else
        private const string BASE_URL = "http://www.b.com//";
#endif

我想问的是什么时候

#if DEBUG

代码中的路径被执行?

是否被执行

  1. 当我在 Visual Studio 中运行调试会话时?
  2. 当我从调试文件夹手动运行有问题的 exe 或 dll 时?
  3. 还有什么我忘了说的情况吗?
4

7 回答 7

58

#if DEBUG这是一个预处理器定义。

它在您定义 DEBUG 常量时编译。是的,它是 Debug Build Configuration 的默认设置。

Visual Studio 2010 项目属性: Visual Studio 2010 项目属性

如果Define DEBUG constant选中 VS 将编译:

private const string BASE_URL = "http://www.a.com/";

否则(未选中)VS 将编译:

private const string BASE_URL = "http://www.b.com//";
于 2012-10-18T17:49:05.270 回答
14

这是一个预处理器指令。DEBUG 部分中的代码是在您进行调试构建时编译的(更具体地说,是在定义 DEBUG 常量时)。即,如果您进行调试构建,BASE_URL 将指向 www.a.com。否则它将指向 www.b.com。

于 2012-10-18T17:48:03.177 回答
11

VS 2017 实际上会感知活动配置,例如,如果选择了发布配置,则会将调试条件变灰。

在此处输入图像描述

于 2017-10-19T15:38:28.303 回答
9

当您使用 DEBUG 指令进行编译时。因此,如果设置了,则只有第一行将是编译后的二进制文件的一部分,如果未设置,则第二行将是二进制文件的一部分。

在 VS 中编译调试配置时默认设置 DEBUG,但是您可以为任何配置手动设置它

于 2012-10-18T17:48:04.363 回答
4

那是一个“编译器指令”,这意味着它实际上将根据您输入的#if 在构建过程(或编译)中包含或排除代码。话虽如此,DEBUG 符号位于项目的属性中,并且在 Visual Studio 中通常会在“发布”版本中自动删除。

所以基本上,它不必在调试中运行的 Visual Studio 中,也不必在任何特定文件夹中,您的代码就是这样构建的。

于 2012-10-18T17:50:48.773 回答
3

如果您使用 DEBUG 配置进行编译,则 else 行之前的代码将被编译,而另一行则不会。如果您在任何其他配置中编译,则将编译第二行而第一行不会。

于 2012-10-18T17:49:37.267 回答
2

转到“项目属性”-> 应用程序的构建选项卡。如果配置:活动(调试),则启用调试配置。下面的代码将打印到控制台。

#if DEBUG
    Console.WriteLine("in debug mode...");
#endif

如果配置:活动(发布)则启用发布配置。下面的代码将打印到控制台。

#if RELEASE
    Console.WriteLine("in release mode...");
#endif

如果您想在 DEBUG 和 RELEASE 模式之间切换,请使用工具菜单下方的“调试/发布/配置管理器”下拉菜单。抱歉,大多数开发人员都知道......但有时会被忽视并导致混淆为什么上面的代码是没有正确运行。

于 2017-11-08T16:41:42.790 回答