在.aspx文件中进行条件编译

时间:2010-03-09 12:19:02

标签: asp.net

我需要.ASPX文件根据条件编译符号表现不同。

让我们说一个简单的例子:

<%@ Control Language="C#" AutoEventWireup="true" (...) %>
<% #ifdef DEBUG %>
     <asp:SomeDebugControlHere runat="server"/>
     .. well .. a LOT of code here
<% #else %>
    <asp:SomeReleaseControlHere runat="server"/>
    .. and a LOT of other code here
<% #endif %>

稍后编辑:更多说明。问题是类 SomeDebugControlHere 甚至没有在发布版本中定义(它在现实生活中更复杂,但是请注意这个例子)。所以在page.aspx.designer.cs中我需要在调试版本中得到它:

/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.SomeDebugControlHere myControl

这在发布版本中:(并且从不都是)

/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.SomeReleaseControlHere myControl

显然我需要ASPX文件中的标记不同,但我还需要修改designer.cs文件以合并新的对象/类。

我只是希望有人知道一种聪明的方法,通过一些控制继承来做这件事,任何允许我根据编译构建设置指定不同控件类的东西。

3 个答案:

答案 0 :(得分:5)

如果只是需要调整,应该是:

<% #if DEBUG %>

如果你希望它表现得像一组C#代码那么。

答案 1 :(得分:1)

根据您声明它们的位置编译符号似乎有所不同:作为项目属性,使用@Page指令或在web.config中。

只有 web.config 中定义的符号似乎在.aspx文件中有效。

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

找到关于此herehere

的一些信息

答案 2 :(得分:1)

我认为答案在某种程度上是设计器文件中自动生成的注释:

/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.SomeDebugControlHere myControl

您应该将这些控件的声明移到代码隐藏文件中,并将它们包装在匹配的#ifdef语句中。