在我看过#if编译器指令的所有例子中,他们使用“DEBUG”。我可以以相同的方式使用“RELEASE”来排除在调试模式下编译时我不想运行的代码吗?我想用这个块包围的代码会发出一堆电子邮件,我不想在测试时不小心将它们发送出来。
答案 0 :(得分:367)
RELEASE
未定义,但您可以使用
#if (!DEBUG)
...
#endif
答案 1 :(得分:253)
不,它不会,除非你做一些工作。
这里的重要部分是DEBUG的真正含义,它是编译器可以检查的一种常量定义。
如果检查项目属性,在Build选项卡下,您会发现三件事:
没有这样的复选框,也没有预先定义的名称为RELEASE的常量/符号。
但是,您可以轻松地将该名称添加到标记为条件编译符号的文本框中,但请确保在执行此操作之前将项目配置设置为释放模式,因为这些设置是按配置进行的。
基本上,除非您将其添加到文本框中,否则#if RELEASE
将不会在任何配置下生成任何代码。
答案 2 :(得分:35)
不。
在调试配置中,有一个DEBUG
定义的常量(由Visual Studio自动定义),而没有为发布模式定义的此类常量。检查构建下的项目设置。
在项目下选择[定义DEBUG常量] - >构建就像在每个文件的开头包含#define DEBUG一样。
如果要为发布配置定义RELEASE常量,请转到:
答案 3 :(得分:24)
在我的VS安装(VS 2008)#if RELEASE
不起作用。但是,您可以使用#if !DEBUG
示例:
#if !DEBUG
SendTediousEmail()
#endif
答案 4 :(得分:9)
我以前从未见过......但我看到了:
#if (DEBUG == FALSE)
和
#if (!DEBUG)
你的工作是什么?
答案 5 :(得分:6)
您可以将#if(!DEBUG)
用于此目的。
答案 6 :(得分:4)
所以,当定义RELEASE条件编译符号时,#if RELEASE
或#if (RELEASE)
与#if DEBUG
的工作方式相同。
以下摘自“Pop Catalin”帖子: 如果要为发布配置定义RELEASE常量,请转到: *项目属性 - >构建 *选择发布模式 *在条件编译符号文本框中输入:RELEASE
答案 7 :(得分:2)
我知道这是一个老问题,但值得一提的是,您可以在DEBUG和RELEASE之外创建自己的配置,例如TEST或UAT。
如果然后在项目属性页面的Build选项卡上,则设置"条件编译符号"然后,您可以使用诸如
之类的构造来测试(例如)#if (DEBUG || TEST )
//Code that will not be executed in RELEASE or UAT
#endif
您可以出于特定原因使用此构造,例如,如果您有需要,可以使用不同的客户端,甚至可以使用整个Web方法。我们过去也使用过这种方法,其中一些命令导致特定硬件出现问题,因此我们在部署到硬件X时为应用程序配置了一个。
答案 8 :(得分:0)
您可以创建自己的条件编译时符号(您喜欢的任何名称)。 转到位于项目属性框中的“项目构建对话框”, 菜单选项:Project-> [projectname]属性...
您也可以在“ C#代码文件的顶部”定义它们。喜欢:
#define RELEASE
// or
#undef RELEASE
您可以在#if语句中使用该符号:
#if RELEASE
// code ...
#elif …
// code ...
#endif
// or
#if !RELEASE
// code ...
#endif
答案 9 :(得分:0)
虽然M4N's answer(bool isRelease = true;
#if DEBUG
isRelease = false;
#endif
)最有意义,但另一种选择可能是使用预处理器来修改其他标志的值。例如
bool sendEmails = true;
#if DEBUG
sendEmails = false;
#endif
或者更好的是,与其参考我们是处于发布还是调试模式,不如使用标志定义预期的行为并根据模式进行设置:
if (sendEmails) {/* send mails */}
这与使用预处理器标志不同,因为标志仍在生产中使用,因此每次调用代码时都会产生SendEmails()
的开销,而不是发布中存在但调试中不存在的代码,但这可能是有利的;例如在您的测试中,您可能想调用{{1}}方法,但是要在模拟中调用,同时在调试中运行以获取其他输出。
答案 10 :(得分:0)
另一种选择:
#If CONFIG = "Release" Then
....
#End If
答案 11 :(得分:-7)
为什么不只是
#if RELEASE
#undef DEBUG
#endif