【问题标题】:Check for any conditional compilation symbols in C#检查 C# 中的任何条件编译符号
【发布时间】:2012-10-13 13:47:45
【问题描述】:

是否可以在 C# 中检查是否存在任何条件编译符号,而不仅仅是一个?

例如,

#if ANY_CONDITIONAL_COMPILATION_SYMBOL_IS_DEFINED
    MessageBox.Show( "Don't forget to remove the cc symbols before shipping.");
#else
    ...

【问题讨论】:

  • 并非所有编译符号都意味着“这不是生产版本”... IMO 您需要找出哪个是问题,并处理这些...

标签: c# compilation conditional-statements


【解决方案1】:

您可以使用|| 运算符:

#if (DEBUG || SOME_OTHER)
    MessageBox.Show(...)
#endif

有关此预处理器符号的更多信息,请访问MSDN

您只能使用运算符 ==(相等)、!=(不等)来测试 对于 true 或 false 。 True 表示已定义符号。该声明 #if DEBUG#if (DEBUG == true) 具有相同的含义。您可以使用运算符 && (and), || (或),和! (not) 评估是否有多个 符号已定义。您还可以对符号和运算符进行分组 带括号。

【讨论】:

    【解决方案2】:

    你可以嵌套它们:

    #if DEBUG
    #if FOOBAR
        MessageBox.Show( "Don't forget to remove the cc symbols before shipping.");
    #endif
    #endif
    

    这需要同时设置 DEBUG 和 FOOBAR 才能显示消息。

    没有办法检查任何符号,但你可以对你使用的所有符号进行检查。

    【讨论】:

    • 确实有,看我的回答。
    【解决方案3】:

    如果我正确理解了您的问题,那么您希望确保交付给客户端的最终构建应该是在没有任何条件编译参数的情况下构建的。

    条件编译参数被指定为切换到csc(C# 编译器)。构建团队可以维护一个清单(基本上是单独的配置),以便在构建解决方案时,不会使用条件编译参数来构建解决方案/项目。可以有一个单独的构建配置,用于内部测试。

    我认为 C# 中没有一种方法可以枚举为项目定义的条件编译参数,因为 CC 参数基本上用于编译项目。一旦项目建成,它们就没有任何意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 2011-06-11
      • 2010-09-21
      • 2018-01-21
      • 2010-10-03
      • 2019-03-24
      相关资源
      最近更新 更多