ASPX / ASCX页面中的“#if DEBUG”

时间:2009-06-25 22:03:46

标签: asp.net preprocessor

我希望能够根据我在VS2005 IDE中选择的模式(DEBUG或RELEASE)指向2个程序集中的一个。像这样的东西(不起作用):

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="VideoDialog.ascx.cs" Inherits="Company.Web.Base.Controls.VideoDialog" %>

<% #if DEBUG %>
<%@ Register TagPrefix="Company" Assembly="Company" Namespace="Company.UI.Controls.VideoControl" %>
<% #else %>
<%@ Register TagPrefix="Company" Assembly="Company.UI.Controls.VideoControl" Namespace="Company.UI.Controls.VideoControl" %>
<% #endif %>

<Company:CompanyVideo ID="Video1" runat="server"></Company:CompanyVideo>

所以,我的问题是:如何在ASPX或ASCX页面中正确使用#if DEBUG?

3 个答案:

答案 0 :(得分:3)

我不知道如何得到你想要的东西,但我面临同样的问题。我在web.config中执行控制引用,然后执行构建步骤以复制适当的web.config以进行发布/调试。它的工作原理是因为你无论如何都需要一个不同的web.config来发布/调试(如果仅用于debug =“true”属性),并且因为你可以有一个不同的post build步骤来进行调试和发布。

答案 1 :(得分:3)

<%
//<compilation debug="false"> in web.config
//*.aspx

#if DEBUG
    Response.Write("<script type=\"text/javascript\">");
    Response.Write("$.validator.setDefaults({ debug: true })");
    Response.Write("</script>");
#endif

%>

答案 2 :(得分:2)

另一种方法是使用HtmlHelper扩展方法。基本上你用这样的代码编写C#文件:

namespace ExtensionHandlers
{
    public static class MetaTags
    {
        public static string GetMetaTags(this HtmlHelper html)
        {
            #if DEBUG

            return string1;

            #else

            return string2;

            #endif
        }
    }
}

然后在你的ascx文件中导入文件:

<%@ Import Namespace="ExtensionHandlers" %>

最后你想要的代码就是这样做:

<%= Html.GetMetaTags() %>

免责声明:我没有编译过这个,可能存在编码错误。祝你好运。