2011-01-01 13 views
0

AFAIK, übliche ASP.NET-Website/Web-Anwendung, die in den DEBUG-Modus eingeschaltet wurde, wenn die Web/App-Konfigurationseinstellung "compilation" debug = "false" hat.ASP.NET: Wie kann ich im DEBUG-Modus kompilieren?

Aber ich verstehe nicht klar, wie es funktioniert. Lassen Sie uns ein Beispiel betrachten:

Ich habe <compilation debug="true" />. Ich habe die folgende Zeile in „Page_Load“ Methode hinzugefügt:

System.Diagnostics.Debug.WriteLine("Page_Load"); 

Wenn ich die Web-Site in "Debug-Modus gestartet (mit F5-Taste) Es hat mich‚Page_Load‘in Ausgabefenster. Alles ist soweit in Ordnung.

Wenn ich Anwendung Übersetzungsmodus in Nicht-Debug ändern:

Wird es alles für 'Nicht-Debug-Modus neu kompilieren? Reicht das, um mit dieser Änderung nur in "Produktions" -Umgebung zu gehen?

Ich denke, es sollte für Websites ausreichen, die kein anderes Projekt verwenden. Ansonsten würde ich besser die gesamte Konfiguration in den "Release" -Modus schalten. In diesem Fall wird jedes Projekt im "Release" -Modus neu kompiliert.

Bin ich richtig? Könnten Sie mir bitte sagen, wenn hier etwas nicht stimmt?

Vielen Dank!

+0

Überprüfen Sie dies: http://stackoverflow.com/questions/1600985/system-diagnostics-debug-writerine-in-production-code – gbs

Antwort

1

Der Punkt zu Ihrer Frage ist der Unterschied zwischen dem Kompilieren in den Debug/Release-Modi von Visual Studio und dem Debug-Flag der Web.config.

Ich werde versuchen, Sie beide zu erklären.

Zunächst müssen Sie kennen lernen, wie eine ASP.NET-Anwendung kompiliert wird, sonst werden Sie den Unterschied zwischen den beiden Kompilationen nicht verstehen.

Eine ASP.NET-Anwendung wird von Markup (dh .aspx Seiten, .ascx-Steuerelemente, .ashx .asmx-Marker-Dateien) und Code-Behind gemacht. Code-Behind, aus der Sicht Ihrer IDE (egal Visual Studio, MonoDevelop usw.) ist eine .NET-Klassenbibliothek, dh. eine Reihe von Klassen, die nichts alleine machen. Diese können unabhängig von der IDE-Einstellung in den Debug- oder Release-Modus kompiliert werden. Wenn Sie in den Freigabemodus kompilieren, werden Aufrufe an die Klasse Debug ignoriert.

Was ist mit Markup? Wenn Sie die Webanwendung starten, erhalten die Markupdateien vom Anwendungsserver kompiliert, um die endgültigen Assemblys zu erhalten. Zum Beispiel wird eine Default.aspx Seite mit einer CodeBehind-Datei in eine letzte Klasse kompiliert, die die CodeBehind-Klasse erbt und alle statischen Teile sowie alle in der Basisklasse in den Positionen instanziierten Steuerelemente in die HTTP-Ausgabe schreibt das wurde während des Designs gewählt. Inline-Code (dh <script runat=server> Tags) wird auch kompiliert. Um den Kompilierungsmodus zu wählen, wird das Debug-Flag in Web.config verwendet, da Sie nicht sicher feststellen können, ob eine Assembly im Debug- oder Release-Modus kompiliert wurde, indem Sie sie einfach reflektieren (obwohl es einige empyritische Kriterien geben könnte)).

In wenigen Worten

  1. Wenn Sie Debug Klasse von Code-Behind nennen, stellen Sie sicher, dass Ihre IDE die Website in Debug-Modus kompiliert
  2. Wenn Sie Debug Klasse von Inline-Code in Markup nennen, machen Sicher haben Sie Web.config Debug-Flag gesetzt
  3. Wenn Sie Ihre Anwendung als Quellcode bereitstellen (es funktioniert nicht für mich in Mono, muss ich zuerst xbuild es), ich bin unsicher, aber ich glaube, die Debug-Flag wird Auch für die erste Kompilierungsstufe verwendet

Ich hoffe ich habe geholfen!

0

Wie ich es verstehe, wenn Sie die web.config für eine Website Web ändern zu deaktivieren das Debuggen, beginnt die JIT von Grund auf - in nur enthalten, da alle Methoden im System.Diagnostics.Debug Namespace markiert werden Debug-Modus ([Conditional("DEBUG")]) Die Aufrufe werden im Release-Build überhaupt nicht vorhanden sein.

Für eine vorkompilierte Webanwendung im Debug-Modus diese Anrufe in dem erzeugten DLLs sein werden, debuggen an diesem Punkt zu deaktivieren wird nicht helfen - Sie brauchen/neu aufzubauen vorkompilieren die Webanwendung im Release-Modus, bevor sie freigegeben wird.

Verwandte Themen