ASPX页面中的#DEBUG预处理程序语句

我正在尝试在ASPX页面中使用预处理程序指令,但页面无法识别它。 这只是我不能做的事吗?

背景:我试图在DEBUG模式中包含完整版本的jQuery(for,well,debugging =)),以及用于发布的缩小版本。 我尝试过这个,但我对ASPX <%语法并不十分熟悉。 我只是从根本上误解了这种语法的作用吗?

     

这里有趣的区别 – 在aspx页面中使用#if DEBUG来自web.config中的标记,但是当你在代码隐藏中使用它时,它会从项目文件中的构建配置中的常量中提取DEBUG。 所以他们实际上访问了两个不同的设置。

因此,据我所知,这实际上是不可能的。

更好的方法可能是使用服务器端代码来包含脚本。 我会用类似的东西

 protected void Page_Load(object sender, EventArgs e) { #if DEBUG ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.js"); #else ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.min.js"); #endif } 

对我来说,最优雅的解决方案是简单地使用预处理程序指令在代码隐藏中定义一个字段,然后从aspx页面检查其值。

在代码隐藏中:

 public partial class WebClient : System.Web.UI.Page { #if DEBUG public bool DebugMode = true; #else public bool DebugMode = false; #endif } 

Aspx页面:

 <%if(this.DebugMode){%>  <%}%> <%else{%>  <%}%> 

我尝试了你的代码,它对我来说很好。 我从web.config中的system.web / compilation部分启用或禁用了DEBUG,作为Web站点运行(未作为Web应用程序进行测试;可能不同……)。

要查看该代码的作用,请在页面中添加有意的语法错误,并尝试在启用调试模式的情况下运行它。 编译器将在错误页面上生成一个链接,允许您查看源。

提示:预处理器指令插入到输出中。

 Line 218: #if DEBUG Line 219: Line 220: #line default Line 221: #line hidden Line 222: @__w.Write("\r\n\r\n"); Line 223: Line 224: #line 14 "F:\Test\test.aspx" Line 225: #else Line 226: Line 227: #line default Line 228: #line hidden Line 229: @__w.Write("\r\n\r\n"); Line 230: Line 231: #line 16 "F:\Test\test.aspx" Line 232: #endif 

当然,还有其他(更好的)方法来做你想要的事情......

多年来,我试图通过多种方式取得成功。 在玩了asp.net mvc之后,我有了这个想法。 还有一种可能性是使用无效的MIME类型将它全部保存在aspx页面中。 在asp.net MVC中,模板加载了无效的MIME类型,因此浏览器不会解析它们。 我在这里遵循相同的模式; 沃拉! 成功……您需要一个静态函数,以便您轻松访问调试约束。

  

Ops.IsRelease()是公共静态函数,它返回调试constaraint

  Public Shared Function IsRelease() As Boolean Dim [release] = False #If Not debug Then [release]=True #End If Return [release] End Function 

我有同样的问题,我试图在asp.mvc应用程序和webform应用程序中解决它。 #if调试始终返回true,它从不考虑web.config编译设置。 我用与本文中发布的Syam建议类似的方式解决了这个问题,但是我使用的是astatcic变量而不是静态函数: http ://www.psworld.pl/Programming/DebugDirective

这是我的解决方案:

 protected void Page_Load(object sender, EventArgs e) { if (System.Diagnostics.Debugger.IsAttached) { ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.js"); } else { ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.min.js"); } } 

不幸的是,我认为你不能在aspx中拥有预处理器指令。

一个更简单的方法是简单地在代码隐藏中使用jQuery URL中的属性,然后可以设置预处理程序指令来声明它。 或者,如果您希望将URL保留在代码前面,则可以使用Literal控件并根据处理器指令在代码隐藏中切换其可见性。

例如:

代码盈:

       

代码隐藏,在Page_Load方法中:

 #if DEBUG litJQueryDebug.Visible=true; litJQuery.Visible=false; #endif