在ASPX/ASCX页面中的#if DEBUG

3

我希望能够根据我在 VS2005 IDE 中选择的模式(DEBUG 或 RELEASE)之一,指向两个程序集中的一个。类似于以下代码(不起作用):

<%@ 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?

就记录而言,您所拥有的内容在控制引用之外是有效的。我几乎使用完全相同的技术来动态控制我的JavaScript中的内容,它完美地工作。因此,您的问题与控制引用有关。 - Erik Allen
3个回答

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

%>

3

我不知道如何获得您想要的内容,但我面临同样的问题。我会在 web.config 中进行控件引用,并进行后置构建步骤以复制适当的 web.config 以供发布/调试使用。这可以正常工作,因为您需要针对发布/调试使用不同的 web.config 文件(即使只是针对 debug="true" 属性),并且可以有不同的发布/调试后置构建步骤。


你有做这个的例子吗?我的另一个任务是为这家公司引入自动构建,除了非常基本的构建之外,我几乎没有做过其他事情。 - Keith Barrows
1
魔法在于如果"$(ConfigurationName)" == "Debug" ...批处理文件...更多信息:发现了一些建议的SO问题https://dev59.com/NnVC5IYBdhLWcg3w51lv和MSDN文档:http://msdn.microsoft.com/en-us/library/ke5z92ks.aspx以及一个博客条目http://www.adduxis.com/blogs/blogs/sven/archive/2005/11/01/15.aspx。 - MatthewMartin

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() %>

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


@Jaap:对于常规的WebForms,这应该是页面代码后台类中的受保护方法。 - abatishchev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接