4

我想根据我设置的配置/符号动态编译 ASP.NET 网站(不是具有 .csproj 的项目)。所以在配置管理器下,我有以下内容:

DEVELOPMENT
STAGING
PRODUCTION

Default.aspx.cs我有:

#if PRODUCTION
      lblMessage.Text = "PRODUCTION";
#elif STAGING
      lblMessage.Text = "STAGING";
#elif DEVELOPMENT      
      lblMessage.Text = "DEVELOPMENT";
#endif

web.config我有:

  <system.codedom>
    <compilers>

      <compiler
           language="c#;cs;csharp" extension=".cs"
           compilerOptions="/d:DEVELOPMENT,STAGING,PRODUCTION"
           type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

    </compilers>

  </system.codedom>

但是,无论我选择哪种配置(开发、暂存、生产),当我查看网页时(重建后),我总是得到生产。奇怪的是,它总是编译我在“compilerOptions”属性中的最后一个。

虽然我可以找到解决这个问题的答案的各种问题,但它对我不起作用。我已经查看/尝试了这个但没有成功:

http://odetocode.com/blogs/scott/archive/2005/12/01/conditional-compilation-in-asp-net-2-0.aspx

未定义条件编译符号

http://blog.aggregatedintelligence.com/2008/07/conditional-compilation-in-aspnet.html

谢谢!

4

1 回答 1

0

这将通过在项目中使用构建配置来更好地处理。当前可能未定义正确的符号。默认情况下,有一个调试和发布配置。您需要创建/编辑您的构建配置以匹配您的符号。此方法将允许您从构建配置下拉对话框中选择您想要使用的构建配置并构建。

此外,还有很多项目我把自己画到了一个角落里,各种#if DEBUG疯狂。如果您可以将这些条件分解到您的配置文件中并实现配置转换,那么您将来(或您的继任者)的生活会更轻松。

于 2013-09-06T19:23:44.633 回答