检测调试,释放和我自己的模式C#

时间:2018-07-23 08:30:58

标签: c# .net visual-studio debugging configuration

我有DEBUG,RELEASE和MYMODE配置模式。如何检测到它们?

#if DEBUG
#endif

仅检测DEBUG和其他任何内容,而不检测RELEASE和MYMODE之间的差异。 我该怎么办?

更多信息:

我在想这样的事情:

#if DEBUG
#elif RELEASE
#elif MYMODE

但是如果我有RELEASE或MYMODE,则代码的所有部分都是灰色的,仅对于DEBUG模式,DEBUG部分是彩色的。我也尝试过

#define MYMODE

但是,为此,MYMODE始终为true,并不总是设置哪种模式。

4 个答案:

答案 0 :(得分:2)

首先,您可以在#if中使用布尔运算符:

#if DEBUG || MYMODE
…
#endif

第二,您可以使用#else#elif来分解事物……

#if DEBUG
// Debug only
#elif MYMODE || RELEASE
// In either release or MYMODE
#else
// Otherwise
#endif

这两种方法的结合涵盖了大多数用例。

答案 1 :(得分:1)

MyMode是配置。但是,就其本身而言,它并没有定义任何条件编译符号。

您可以通过项目编译设置 1 或将-define选项传递给csc来更改它们。如果查看Debug配置的编译设置,将会发现DEBUG条件编译符号已经定义 2 ,但是Release配置中没有定义RELEASE符号

(如您在上面所发现的)没有要求在配置与其定义的符号之间存在任何关系。

#if(和族)被定义为可用于条件编译。


1 项目->属性->构建->常规。

2 在某些版本的Visual Studio中,有一个专用的复选框,而不是在条件编译符号中列出,但效果是相同的。如果您卸载项目并检查XML,则会发现所有常量都存储在<DefineConstants>元素中。

答案 2 :(得分:0)

一样:

#if MYMODE
#endif

#if RELEASE
#endif

more complex

#if (DEBUG && MYMODE)
#endif

#if (!RELEASE && MYMODE)
#endif

答案 3 :(得分:0)

我也找到了解决方案,谢谢大家。我使用了这段代码:

#if DEBUG
#elif MYMODE
#else

但是首先我需要将名称MYMODE放在“属性”>“构建”>“条件编译符号”中。我以前没有做过,所以有问题。