5

我无法让 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 未定义。

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

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

编辑:如果我使用 FOO 或 BAR 配置文件并不重要,它们似乎都没有按照应有的方式定义 MyData 符号。

编辑2:

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

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

似乎 Visual Studio 没有为 App_Code 内的常规 .cs 文件设置条件编译符号

4

1 回答 1

6

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

于 2009-12-30T17:08:08.603 回答