我需要.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文件以合并新的对象/类。
我只是希望有人知道一种聪明的方法,通过一些控制继承来做这件事,任何允许我根据编译构建设置指定不同控件类的东西。
答案 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>
的一些信息
答案 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
语句中。