在我看到的所有关于#if编译器指令的例子中,它们都使用了“DEBUG”。我可以以同样的方式使用“RELEASE”来排除在调试模式下编译时不想运行的代码吗?我想用这个块包围的代码会发送一堆电子邮件,我不想在测试时意外地发送这些邮件。


当前回答

不,不会的,除非你做点工作。

这里重要的部分是DEBUG到底是什么,它是编译器可以检查的一种定义的常量。

如果你检查项目属性,在Build选项卡下,你会发现三个东西:

标记为“条件编译符号”的文本框 标记为“定义调试常量”的复选框 标记为“定义TRACE常量”的复选框

没有这样的复选框,也没有预先定义的名为RELEASE的常量/符号。

但是,您可以轻松地将该名称添加到标记为“条件编译符号”的文本框中,但请确保在这样做之前将项目配置设置为发布模式,因为这些设置是每个配置的。

所以基本上,除非您将其添加到文本框中,否则#if RELEASE在任何配置下都不会生成任何代码。

其他回答

我以前从来没见过……但我已经看到:

#if (DEBUG == FALSE)

and

#if (!DEBUG)

对你有用吗?

在我的VS install (VS 2008) #if RELEASE不工作。但是你可以使用#if !DEBUG

例子:

#if !DEBUG
SendTediousEmail()
#endif

不。

在调试配置中有一个debug定义的常量(由Visual Studio自动定义),而在发布模式中没有定义这样的常量。检查构建中的项目设置。

在Project -> Build下选择[Define DEBUG常量]就像在每个文件的开头都包含# Define DEBUG。

如果你想为发布配置定义一个RELEASE常量,请到:

项目属性->构建 选择释放模式 在“条件编译符号”文本框中输入:RELEASE

RELEASE没有定义,但是您可以使用

#if (!DEBUG)
  ...
#endif

我知道这是一个老问题,但值得一提的是,您可以在DEBUG和RELEASE之外创建自己的配置,例如TEST或UAT。

如果在项目属性页的Build选项卡上,你将“条件编译符号”设置为TEST(例如),你就可以使用这样的构造

#if (DEBUG || TEST )
    //Code that will not be executed in RELEASE or UAT
#endif

您可以出于特定的原因使用此构造,例如,如果需要,可以使用不同的客户端,甚至可以使用整个Web方法。我们过去也使用过这种方法,因为某些命令在特定的硬件上导致了问题,所以当部署到硬件X时,我们有一个应用程序的配置。