如何在一个地方进行全局预处理器定义而不产生大量警告?

dan*_*ter 1 c# preprocessor global definition preprocessor-directive

我想要一种具有“全局预处理器定义”的方法,以便我可以在编译之前更改单个值以添加或删除程序的功能。目前我有一个“全局脚本”(称为 God.cs),其常量如下:

public const bool PRINT_RUN_VALUES = true;
public const bool DEBUG_MOVEMENT = false;
public const bool DOUBLE_SPEED = false;
Run Code Online (Sandbox Code Playgroud)

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

在脚本1中:

if (God.PRINT_RUN_VALUES) {
   float averageDist = /* calculate values */
   print("Script1: averageDist = " + averageDist);
}
Run Code Online (Sandbox Code Playgroud)

在脚本2中:

if (God.PRINT_RUN_VALUES) {
   print("Script2: radius = " + radius);
   print("Script2: time = " + time);
}
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是我得到了很多

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

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

#pragma warning disable 0162
#pragma warning disable 0429
Run Code Online (Sandbox Code Playgroud)

但我不想这样做,因为这些警告在不涉及 God.cs 中的这些值的情况下可能很有用。另一种方法可能是使用经典的预处理器定义,例如:

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

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

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

Dav*_*idG 6

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

项目属性

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

#if CHEESE
    public string CheeseName = "Gouda";
#endif
Run Code Online (Sandbox Code Playgroud)

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

  • 如果有多个符号,请添加它们并用空格或分号分隔它们。 (2认同)