如何在没有大量警告的情况下在一个地方进行全局预处理器定义?

时间:2017-04-04 23:26:59

标签: c# global definition preprocessor preprocessor-directive

我想要一种方法来获得全球预处理器定义"这样我可以在编译之前更改单个值来添加或删除程序的功能。目前我有一个"全球脚本" (称为God.cs)具有以下等内容:

public const bool PRINT_RUN_VALUES = true;
public const bool DEBUG_MOVEMENT = false;
public const bool DOUBLE_SPEED = false;

使用这些值的所有相关脚本,例如:

脚本1中的

if (God.PRINT_RUN_VALUES) {
   float averageDist = /* calculate values */
   print("Script1: averageDist = " + averageDist);
}
脚本2中的

if (God.PRINT_RUN_VALUES) {
   print("Script2: radius = " + radius);
   print("Script2: time = " + time);
}

这种方法的问题在于我得到了大量的

  

CS0162:检测到无法访问的代码

警告。我可以使用以下方式关闭这些警告:

#pragma warning disable 0162
#pragma warning disable 0429

但是我不想这样做,因为这些警告对于不参与God.cs的这些价值观的情况非常有用。另一种方法可能是使用经典的预处理器定义,例如:

#define PRINT_RUN_VALUES
...
#if (PRINT_RUN_VALUES)
   float averageDist = /* calculate values */
   print("Script1: averageDist = " + averageDist);
#endif

但据我所知,这需要我添加#define PRINT_RUN_VALUES'在每个.cs文件的开头,当我想快速关闭或打开这些全局语句时,这将成为一场噩梦。我希望所有这些全局定义都是一个单独的位置,以便我可以快速关闭它们。

如何定义一些预处理器,使其不包含在每个脚本中?我知道有一些符合此标准的预处理器定义,例如用于检查正在编译软件的操作系统的定义。或者还有另一种解决方法吗?

1 个答案:

答案 0 :(得分:2)

您可以在项目属性中设置这些,例如,这是DEBUG符号的定义方式。右键单击您的项目,选择 Properties 并在标有条件编译符号的框中输入自定义csymbols:

Project properties

现在在我的代码中我可以这样做:

#if CHEESE
    public string CheeseName = "Gouda";
#endif

请注意,这些符号被定义为配置的一部分。这意味着您可以为发布定义不同的符号,例如调试或UAT环境。