【问题标题】:Detect DEBUG, RELEASE and my own mode C#检测 DEBUG、RELEASE 和我自己的模式 C#
【发布时间】:2018-12-30 15:45:20
【问题描述】:

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

#if DEBUG
#endif

只检测 DEBUG 和其他任何东西,但不检测 RELEASE 和 MYMODE 之间的区别。 我该怎么做?

更多信息:

我在想这样的事情:

#if DEBUG
#elif RELEASE
#elif MYMODE

但如果我有 RELEASE 或 MYMODE,代码的所有部分都是灰色的,只有 DEBUG 模式的 DEBUG 部分是彩色的。我也试过了

#define MYMODE

但为此,MYMODE 始终为真并不影响设置了什么模式。

【问题讨论】:

  • 为什么#DEBUG 应该“检测”#RELEASE 甚至是任意的、完全不相关的符号?
  • 首先,你不应该需要RELEASE,因为!DEBUG应该是同一个意思。其次,你是如何定义你的条件编译符号的?
  • 我没有定义任何东西。我试过#define MYMODE,但它一直都是真的,不知道是什么模式。

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


【解决方案1】:

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

#if DEBUG || MYMODE
…
#endif

其次,你可以使用#else#elif 来分手……

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

这两者的结合涵盖了大多数用例。

【讨论】:

  • 我尝试了#if DEBUG #elif RELEASE #elif MYMODE,但是当我使用 Release 或 Mymode 时,所有代码部分都是灰色的,只有 Debug 部分是彩色的。所以我很困惑它是只适用于调试还是它的一些与错误。
  • @BananaCake 检查解决方案配置映射到正确的项目配置项目的构建设置是否正确。此外,有时 VS 在不重新启动的情况下不会拾取配置更改。这也不适用于打开的不属于项目的文件(例如,使用链接文件做一些聪明的事情)。
  • 其实@Richard 是对的!!!每次需要运行 DEBUG 或 RELEASE 模式代码时都需要重新启动 VS。至少在 Xamarin.Forms 中是这样工作的。在 VS2019 中
【解决方案2】:

MyMode 是一个配置。但是,它本身并没有定义任何条件编译符号。

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

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

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


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

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

【讨论】:

    【解决方案3】:

    同样的:

    #if MYMODE
    #endif
    
    #if RELEASE
    #endif
    

    more complex:

    #if (DEBUG && MYMODE)
    #endif
    
    #if (!RELEASE && MYMODE)
    #endif
    

    【讨论】:

      【解决方案4】:

      我找到了解决方案,也感谢你们。我使用了这段代码:

      #if DEBUG
      #elif MYMODE
      #else
      

      但首先我需要将名称 MYMODE 放入 Properties > Build > Conditional Compilation Symbols。我之前没有这样做,所以有问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-24
        • 2011-01-01
        • 2023-03-31
        • 1970-01-01
        • 2015-06-14
        相关资源
        最近更新 更多