动态编译的ASP.NET网站

时间:2013-08-26 17:15:06

标签: c# asp.net web-config

我想动态编译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>

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

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

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

Conditional compilation symbols not being defined

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

谢谢!

1 个答案:

答案 0 :(得分:0)

通过在项目中使用build configurations可以更好地处理这个问题。当前没有定义正确的符号。默认情况下,有一个调试和发布配置。您需要create/edit您的构建配置以匹配您的符号。此方法允许您从构建配置下拉对话框和构建中选择要使用的构建配置。

此外,有很多项目让我自己画成了各种#if DEBUG疯狂的角落。如果您可以将这些条件分解到配置文件中并实施configuration transforms,那么您将来可以更轻松地完成您的(或您的继任者)生活。