提问人:chipbk10 提问时间:2/9/2015 最后编辑:Bernd Lindechipbk10 更新时间:2/9/2015 访问量:91
未从另一个文件 C# .Net 中检测到该指令
The directive is not detected from another file C#, .Net
问:
我有一个配置文件,其中包含我的程序的所有配置。在该文件中,我定义了一个指令,如下所示:
---------- 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”。
我错过了什么吗?
答:
3赞
Bernd Linde
2/9/2015
#1
根据 MSDN 文档,
使用 #define 创建的符号的作用域是定义符号的文件。
因此,使用指令是没有好处的。
而是使用在文件中创建的属性,并根据该属性更改 的值#define
web.config
MyServerName
评论
0赞
AFract
2/9/2015
伯恩德·林德(Bernd Linde)给出了一个很好的答案。正如他(几乎)所说,您的案例看起来更像是一个应用程序设置:我认为它不应该作为编译符号处理!
0赞
DarkUrse
2/9/2015
我实际上同意,这看起来更像是原始用户打算做的事情。但我只是认为,由于此代码旨在加载测试字符串,因此他不想在生产代码中保持这些“符号”可见。无论如何,这就是要走的路。
3赞
DarkUrse
2/9/2015
#2
为了确保它位于任何位置,我会在项目本身的设置中定义这个预处理器开关(在 Visual Studio 中,从项目的属性页转到“生成”选项卡,然后在“条件编译符号”部分中定义开关); 要么在命令行上用 '/define:name1[;名称2]'
评论