我想根据我设置的配置/符号动态编译 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
Conditional compilation symbols not being defined
http://blog.aggregatedintelligence.com/2008/07/conditional-compilation-in-aspnet.html
谢谢!
最佳答案
使用 build configurations 会更好地处理这个问题在项目中。当前可能未定义正确的符号。默认情况下,有调试和发布配置。你需要 create/edit您的构建配置以匹配您的符号。此方法将允许您从构建配置下拉对话框中选择要使用的构建配置并构建。
此外,还有许多项目让我陷入了各种疯狂的#if DEBUG
困境。如果您可以将这些条件分解到您的配置文件中并实现 configuration transforms那么你会让你(或你的继任者)将来的生活更轻松。
关于c# - 动态编译的 ASP.NET 网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18449418/