2009-04-03 15 views
0

Wie kann ich feststellen, unter welchem ​​Modus meine Site läuft?Wie kann ich feststellen, ob eine ASP.NET-Site "normal" oder "debug" über Visual Studio ausgeführt wird?

In diesem speziellen Fall habe ich Code in den Code-Behind-Seiten, die im "release" -Modus einen Weg gehen sollten - das ist jemand, der dort mit einem Browser navigiert, und einen anderen Weg, wenn ich im Debug-Modus komme VS2008. (Dies sind Dinge wie das Identifizieren der zu verwendenden SQL-Verbindungszeichenfolge, ob bestimmte Fehler- oder Warnmeldungen angezeigt werden sollen usw.)

VS2008 ist so konfiguriert, dass IIS aus verschiedenen Gründen ausgeführt wird (Cassini ist keine Option).

Suche in der Hilfe kann ich nichts finden, aber es muss eine Möglichkeit geben, zu identifizieren, wie die Website gestartet wurde.

Vielen Dank im Voraus.

Antwort

7

Ich bin mir nicht sicher, was du meinst. Wenn Sie wissen möchten, ob die Anwendung gerade debuggt, können Sie die Eigenschaft System.Diagnostics.Debugger.IsAttached überprüfen. Wenn Sie, wenn die Anwendung wissen wollen im Debug-Modus kompiliert, dann können Sie dies tun:

#if DEBUG 
    const bool DebugMode = true; 
#else 
    const bool DebugMode = false; 
#endif 

Sie können aber auch ConditionalAttribute verwenden:

[System.Diagnostics.Conditional("DEBUG")] 
public void ThisMethodWillOnlyExecuteInDebugMode() 
{ 
} 

empfehle ich überdenken, dass, obwohl - in meiner Erfahrung, verschiedene Release-und Debug-Verhalten ist eine hervorragende Möglichkeit, um Fehler in Ihrem Produktionscode einzuführen.

+0

+1, So ziemlich, wie ich es mache – TWith2Sugars

+0

Das war der Trick. Das Überprüfen der System.Diagnostics.Debugger.IsAttached-Eigenschaft sagt mir * genau * was ich wissen muss.Der einzige Ort, an dem wir dies verwenden, ist das Versenden von Benutzern/Entwicklern an die Live/Test-Datenbank. – David

1

Ich benutze diese Methode zu erkennen, ob Debug auf der Kompilation Abschnitt ist: -

bool DebugModeOn() 
{ 
    System.Web.Configuration.CompilationSection configSection = 
      (System.Web.Configuration.CompilationSection)HttpContext.Current.GetSection("system.web/compilation"); 
    return configSection.Debug; 

} 

Dies genau ist nicht perfekt, was Sie fordern. Da dies jedoch in der Produktion falsch und in der Entwicklung wahr sein sollte, kann es gut genug sein.

Bearbeiten: Oder Sie könnten einfach die IsDebuggingEnabled-Eigenschaft des Kontexts verwenden, wie Olivier PAYEN darauf hinweist. : P hoppla.

4
HttpContext.Current.IsDebuggingEnabled 

Siehe this article

+0

+1. Ich kann nicht glauben, dass ich diese Eigenschaft noch nie zuvor gesehen habe. – AnthonyWJones

+0

Leider gibt es immer "True", ob ich F5 in VS2008 oder manuell in IE7 zu https: //server/app/page.aspx navigieren – David

+0

Das ist wunderbar! – UpTheCreek

0

ich den

#if DEBUG 
    // ... 
#else 
    // ... 
#endif 

Ansatz verwenden würde, aber ich nur diese in der "Main" Methode Fang für Exception verwenden würde:

  • Wenn debuggen, dann fangen Sie nicht ein (der Debugger kann also alle nicht abgefangenen Ausnahmen abfangen),
  • wenn Freigabe, dann eine Fehlerseite anzeigen.

Diese müssen nicht den Fluss des Programms ändern, einfach nicht tun, dass es Drachen sein :)

Wenn Sie auf Verbindungszeichenfolgen suchen, zum Beispiel, würde ich sie nur in web.config.

+0

Die Verbindungszeichenfolgen befinden sich mit Sicherheit in der Datei web.config - und werden verschlüsselt, sobald einige Konfigurationsprobleme behoben sind. Die Sache, die wir hier zu identifizieren versuchen, ist, ob ein Entwickler die Site testet oder ein Benutzer sie ausführt (daher wissen wir zum Beispiel, welche Verbindungszeichenfolge verwendet werden soll). – David

Verwandte Themen