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

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

提问人:chipbk10 提问时间:2/9/2015 最后编辑:Bernd Lindechipbk10 更新时间:2/9/2015 访问量:91

问:

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

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

#define TEST_LOCALHOST

public class MyConfig
{
   ....
}

现在,从另一个文件(MyWebService.cs),我根据定义或未定义的指令定义一个变量 MyServerName TEST_LOCALHOST如下所示:

---------- 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

}

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

| ----- WebService
| ---------------- MyWebService.cs
|
| ----- Data
| ---------------- MyConfig.cs

但是,TEST_LOCALHOST始终不在 MyWebService.cs 中定义。我的意思是,我的变量 MyServerName 总是指向“http://MYSERVER”,而不是“http://localhost”。

我错过了什么吗?

C# asp.net using 指令

评论

0赞 CodesInChaos 2/9/2015
我建议使用配置文件来确定服务器名称,而不是将其编译到代码中。

答:

3赞 Bernd Linde 2/9/2015 #1

根据 MSDN 文档

使用 #define 创建的符号的作用域是定义符号的文件

因此,使用指令是没有好处的。
而是使用在文件中创建的属性,并根据该属性更改 的值
#defineweb.configMyServerName

评论

0赞 AFract 2/9/2015
伯恩德·林德(Bernd Linde)给出了一个很好的答案。正如他(几乎)所说,您的案例看起来更像是一个应用程序设置:我认为它不应该作为编译符号处理!
0赞 DarkUrse 2/9/2015
我实际上同意,这看起来更像是原始用户打算做的事情。但我只是认为,由于此代码旨在加载测试字符串,因此他不想在生产代码中保持这些“符号”可见。无论如何,这就是要走的路。
3赞 DarkUrse 2/9/2015 #2

为了确保它位于任何位置,我会在项目本身的设置中定义这个预处理器开关(在 Visual Studio 中,从项目的属性页转到“生成”选项卡,然后在“条件编译符号”部分中定义开关); 要么在命令行上用 '/define:name1[;名称2]'