2008-12-18 5 views
32

Kann ich etwas im Markup einer asp.net-Seite tun, basierend auf der Einstellung "DEBUG-Konstante definieren"?Gibt es ein #IF DEBUG für Asp.net Markup?

#IF (DEBUG) THEN 
    <asp:TextBox ID="TextBox1" runat="server">You're in debug mode</asp:TextBox> 
#END IF 
+1

Die falsche Antwort wurde als die richtige festgelegt. –

Antwort

6

Die nah, wie ich bekommen kann, ist:

<asp:Literal id="isDebug" runat="server" /> 
<script runat="server"> 
    void Page_Load() 
    { 
#if DEBUG 
     isDebug.Text = "You're in debug mode"; 
#endif 
    } 
</script> 

Dies würde Probleme geben, wenn Sie etwas anderes in Ihrem Page_Load() Ereignis haben will; Der obige Literalcode funktioniert nur, wenn die Seite/das Steuerelement keinen Code enthält.

Wenn ich dies tun müsste, würde ich den obigen Code in ein Benutzersteuerelement einkapseln und diese Steuerung in die Seiten von Interesse aufnehmen.

Mein Test Benutzerkontrolle sieht wie folgt aus:

<%@ Control Language="C#" AutoEventWireup="true" %> 
<asp:Literal id="isDebug" runat="server" /> 
<script runat="server">  
    void Page_Load()  
    { 
#if DEBUG   
     isDebug.Text = "You're in debug mode"; 
#endif  
    } 
</script> 
-1

Es wäre einfach genug, um Ihre eigenen zu rollen. Sie könnten einige der kühleren nicht kompilierenden Funktionen von Kompilierungskonstanten verpassen, aber Sie könnten definitiv Markups basierend auf einem globalen Parameter irgendeiner Art hinzufügen.

0

Wie wäre es mit einem Literal und dann mit #if DEBUG in Ihrem Code-Behind, um HTML für Ihre Textbox in das Literal zu injizieren? Es gibt auch direkte Codeblöcke in ASP.NET, aber ich weiß nicht, ob sie sich mit #if-Anweisungen befassen; diese scheinen für den C# -Compiler reserviert zu sein.

56
<form runat="server"> 
<% #if DEBUG %> 
<asp:TextBox ID="TextBox1" runat="server">You're in debug mode</asp:TextBox> 
<% #else %> 
<asp:TextBox ID="TextBox2" runat="server">Mmm... No, I think you're not in debug mode</asp:TextBox> 
<% #endif %> 
</form> 

Beachten Sie, dass Sie nicht die gleiche ID für die Textfelder zuweisen können.

Beachten Sie auch, dass DEBUG wahr ist, wenn es so in web.config gesetzt:

<compilation debug="true"> 
+0

gibt es eine Möglichkeit, Debug debuggen automatisch wahr beim Debuggen und umgekehrt? – Guy

+3

@Guy 'DEBUG' zeigt an, ob Sie einen Debug-Build verwenden (im Gegensatz zu einem Release-Build/anderen). Ich denke, was Sie wollen, ist 'Debugger.IsAttached' oder' HttpContext.Current.IsDebuggingEnabled' - Wird wahr sein, wenn innerhalb von VS gestartet wird, andernfalls false (außer Sie natürlich einen Debugger manuell anfügen) – Basic

+1

Aus meiner Erfahrung funktioniert das nur, wenn Sie habe in der Kopfzeile Ihrer ASPX- oder ACX-Datei '<% @ CompilerOptions =" ​​/ d: DEBUG "%>' deklariert. Aber dann schaltet es nicht automatisch um, wenn Sie von Debug zu Release wechseln. ** Hinweis ** Sie können mehrere Variablen auf diese Weise definieren, wenn Sie sie mit Semikolon trennen, z. '<% @ CompilerOptions =" ​​/ d: meinVar1; meinVar2 "%>'. Jeder dieser Punkte kann mit einer '<% #if myVar%>' Anweisung überprüft werden. – Matt

6

Wenn Sie versuchen, durch Javascript zu Schritt oder minify JavaScript bevorzugen, wenn nicht das Debuggen, ziehe ich diesen Ansatz:

<% if (Debugger.IsAttached) { %> 

    <script src="jquery.js"></script> 

<% } else { %> 

    <script src="jquery.min.js"></script> 

<% } %> 

Ich kann einfach Code durchlaufen, wenn ich Debugging bin, sonst möchte ich die Skripte minimiert werden. Achten Sie darauf, den folgenden Import enthält:

<%@ Import Namespace="System.Diagnostics" %> 

Außerdem ist es schön, die Web Essentials-Visual Studio-Erweiterung zu verwenden zu bündeln/minify Ihre Javascript-Dateien, so dass es nur eine Anfrage an den Server für Ihre Skripte gemacht ist.

Verwandte Themen