未定义条件编译符号

时间:2009-12-30 17:00:06

标签: c# visual-studio conditional-compilation compiler-errors

我无法让Visual Studio按照我的预期行事。我创建了2个配置文件。一个定义了符号FOO,另一个定义了符号BAR。我有这段代码:

static class MyClass{
#if FOO
  public static string const MyData="foo defined";
#endif
#if BAR /*yes, I know #elif would work here too.. just trying to be simple*/
  public static string const MyData="bar defined";
#endif
}

然后在另一个文件中

 if(MyClass.MyData=="foo defined").....

好吧,在我的应用程序中,我收到一条未定义MyClass.MyData的错误。

另外,如果我在FOO配置文件中有它并在#error test之后键入#if FOO之类的内容,那么它将出现构建错误,但是如果我删除它会构建得很好并且当我去运行它我将得到一个编译错误,MyClass不包含MyData的定义。此外,这是一个ASP.Net Web应用程序。

有人可以帮我弄清楚如何使用条件编译吗?它就好像Visual Studio使用编译符号正确编译它一样,但是每当ASP.Net网络服务器执行它时,它都会重新编译它而没有任何符号......但这只是没有任何意义,为什么它会这样做.. < / p>

编辑: 如果我使用FOO或BAR配置文件并不重要,它们似乎都没有像它们那样定义MyData符号。

EDIT2:

好的,这对于复制很重要! 在解决方案中创建一个新的App_Code文件夹,然后在其中添加.cs文件,然后将MyClass添加到其中。这将重现在空白项目中工作的错误。我实际上把它简化为

#if !(FOO || BAR)
  #error neither foo or bar defined
#endif

似乎Visual Studio没有为App_Code

中的常规.cs文件设置条件编译符号

1 个答案:

答案 0 :(得分:6)

由于ASP.NET在开发环境之外编译代码,因此它使用自己的构建配置。您必须在web.config中设置条件编译符号,请参阅此处的链接: Conditional Compilation in ASP.NET 2.0