#DEBUG Preprocessor Aussagen in ASPX-Seite
-
05-07-2019 - |
Frage
Ich versuche, eine Präprozessordirektive in einer ASPX-Seite nutzen zu können, aber die Seite ist es nicht zu erkennen. Ist das nur etwas, was ich nicht tun kann?
Hintergrund: Ich versuche, die Vollversion von jQuery im Debug-Modus (für, na ja, das Debugging =)), und die verkleinerte Version für Release enthalten. Ich habe versucht, aber ich bin nicht sehr vertraut mit der ASPX <% Syntax. Bin ich nur grundsätzlich Missverständnis, was diese Syntax funktioniert?
<% #if DEBUG %>
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
<% #else %>
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<% #endif %>
Lösung
Interessanter Unterschied hier - mit #if DEBUG in der aspx Seite zieht aus dem Tag in der web.config, aber wenn man es in der Code-Behind verwendet, zieht es DEBUG aus der Konstante aus der Build-Konfiguration in der Projektdatei . Also sind sie tatsächlich den Zugriff auf zwei unterschiedliche Einstellungen.
So, soweit ich das beurteilen kann, ist das nicht wirklich möglich.
Andere Tipps
Ein besserer Ansatz kann sein, Server-Side-Code zu verwenden, um das Skript zu schließen. Ich würde so etwas wie verwenden
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
}
Für mich ist die eleganteste Lösung wäre, einfach ein Feld zu definieren, in Code-behind mit Präprozessordirektiven und dann prüfen, für ihren Wert von der aspx-Seite.
Code-Behind:
public partial class WebClient : System.Web.UI.Page
{
#if DEBUG
public bool DebugMode = true;
#else
public bool DebugMode = false;
#endif
}
Aspx Seite:
<%if(this.DebugMode){%>
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
<%}%>
<%else{%>
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<%}%>
Ich habe versucht, den Code, und es funktionierte gut für mich. Ich aktiviert oder deaktiviert DEBUG aus dem system.web / Kompilation Abschnitt in web.config als Webangebot (nicht als Web-Anwendung nicht getestet; vielleicht anders ...).
Um zu sehen, was der Code tut, stellt einen absichtlichen Syntaxfehler in der Seite, und versuchen Sie es aktivierte mit Debug-Modus auszuführen. Der Compiler wird einen Link auf der Fehlerseite erstellen, die Sie die Quelle anzuzeigen können.
. Hinweis: die Pre-Prozessor-Richtlinien ist eingefügt in die Ausgabe
Line 218: #if DEBUG
Line 219:
Line 220: #line default
Line 221: #line hidden
Line 222: @__w.Write("\r\n<script type=\"text/javascript\" src=\"resources/jquery-1.3.2.js\" />\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<script type=\"text/javascript\" src=\"resources/jquery-1.3.2.min.js\" />\r\n");
Line 230:
Line 231: #line 16 "F:\Test\test.aspx"
Line 232: #endif
Natürlich gibt es andere (bessere) Möglichkeiten zu tun, was Sie wollen ...
Ich habe versucht, so viele Möglichkeiten, im Laufe der Jahre zu erreichen, ohne jeden Erfolg. Nach dem Spielen mit asp.net Mvc vor kurzem habe ich diese Idee. Es gibt eine andere Möglichkeit, es zu halten alle in aspx Seite ungültigen MIME-Typen verwenden. In asp.net MVC werden Vorlagen mit ungültigen MIME geladen Typen, so dass der Browser sie nicht analysieren wird. Ich folgte das gleiche Muster hier; Wola! Erfolg ... Sie benötigen eine statische Funktion, die Ihnen einen einfachen Zugriff auf Debug-Einschränkung gibt.
<script src='<%= Page.ResolveUrl("~/Scripts/jquery-1.5.2.min.js") %>'
**type='<%=if(Ops.IsRelease(),"text/javascript","HideMin")%>'**></script>
Ops.IsRelease () ist Public Static-Funktion, die die Debug-constaraint zurück
Public Shared Function IsRelease() As Boolean
Dim [release] = False
#If Not debug Then
[release]=True
#End If
Return [release]
End Function
Ich hatte das gleiche Problem habe ich versucht, es in beide ASP.MVC Anwendung und webform Anwendung zu lösen. Die #if Debug immer true zurück, dauert es nie berücksichtigt die web.config Kompilation Einstellung. Ich löste es in ähnlicher Weise wie Syam Beratung in diesem Post, aber anstatt statischer Funktion verwende ich astatcic Variable wie hier beschrieben: http://www.psworld.pl/Programming/DebugDirective
Hier ist meine Lösung:
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");
}
}
Ich glaube nicht, dass Sie leider Präprozessordirektiven in der aspx haben.
Ein einfacher Weg zu gehen, ist einfach eine Eigenschaft in Ihrem haben Code-behind, dass in der jQuery-URL-Feeds, dann können Sie Präprozessordirektiven setzen es zu erklären. Oder wenn Sie es vorziehen, die URL im Code-infront halten Sie eine Literal-Steuerelement verwenden könnte und schalten ihre Sichtbarkeit in der Code-Behind basierend auf den Prozessor-Richtlinien.
Zum Beispiel:
Code-infront:
<asp:literal id="litJQuery" EnableViewState="false" runat="Server">
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
</asp:literal>
<asp:literal id="litJQueryDebug" EnableViewState="false" Visible="false" runat="Server">
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
</asp:literal>
Code-behind, in der Page_Load-Methode:
#if DEBUG
litJQueryDebug.Visible=true;
litJQuery.Visible=false;
#endif