未从另一个文件 C#、.Net 中检测到该指令

The directive is not detected from another file C#, .Net

我有一个配置文件,其中包含我的程序的所有配置。在那个文件中,我定义了一个指令如下:

------------ MyConfig.cs------------

#define TEST_LOCALHOST

public class MyConfig
{
   ....
}

现在,从另一个文件 (MyWebService.cs),我根据指令 TEST_LOCALHOST 是否定义如下定义了一个变量 MyServerName:

------------ MyWebService.cs------------

using MyData;

public class MyWebService
{

#if (TEST_LOCALHOST)
    private static string MyServerName = "http://localhost:8888";
#else
    private static string MyServerName = "http://MYSERVER";
#endif

}

我程序中的命名空间结构是:

| -  - - 网络服务
| -------------- MyWebService.cs
|
| -  - - 数据
| -------------- MyConfig.cs

然而,TEST_LOCALHOST 始终未在 MyWebService.cs 中定义。我的意思是,我的变量 MyServerName 总是指向“http://MYSERVER", but not to "http://localhost”。

我错过了什么吗?

根据 MSDN documentation

The scope of a symbol that was created by using #define is the file in which the symbol was defined.

因此,使用 #define 指令没有好处。
而是使用在 web.config 文件中创建的 属性 并根据 属性

更改 MyServerName 的值

为了确保它无处不在,我会在项目的设置本身中定义这个预处理器开关(在 Visual Studio 中,转到项目属性页面的 "Build" 选项卡并定义"Conditional Compilation Symbols" 部分中的开关); 要么用'/define:name1[;name2]'

在命令行上定义编译器开关