动态编译的ASP.NET网站

本文关键字:NET 网站 ASP 编译 动态 | 更新日期: 2023-09-27 18:29:01

我想根据我设置的配置/符号动态编译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>

然而,无论我选择哪种配置(DEVELOPMENT、STAGING、PRODUCTION),当我查看网页时(重建后),我总是会得到PRODUCTION。奇怪的是,它总是编译我最后在"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

谢谢!

动态编译的ASP.NET网站

在项目中使用构建配置会更好地处理这一问题。很可能当前没有定义正确的符号。默认情况下,有一个调试和发布配置。您需要创建/编辑内部版本配置以匹配您的符号。此方法将允许您从生成配置下拉对话框中选择要使用的生成配置并进行生成。

此外,还有很多项目让我把自己描绘成一个充满#if DEBUG疯狂的角落。如果您能够将这些条件纳入配置文件并实现配置转换,那么您将使您(或您的继任者)在未来的生活更加轻松。