2009-12-25 6 views

Antwort

5

Vielleicht sollten Sie versuchen:

  • Entwicklungs-Server in der Taskleiste zu stoppen
  • die Konfiguration von Release Schalt
+5

Seltsam, dass dies als die Antwort markiert wurde, hat noch eine -2 Bewertung ... –

+0

Es hat eine negative Bewertung, weil es falsch ist. Es ist korrekt zu sagen, dass Sie in debug sein müssen (oder Sie haben nicht die pdb-Dateien) und Sie müssen den Server erfassen, wenn es gestartet wird (denn das ist, wenn dieser Code ausgeführt wird), aber Sie werden nicht in der Lage sein an den Prozess anhängen. Sie benötigen einen laufenden Prozess, um den Debugger anzuhängen, der global.asax-Code wird in den ersten paar Millisekunden dieses Prozesses ausgeführt, so dass es buchstäblich unmöglich ist (ohne die [korrekte Antwort unten] zu verwenden) (https://stackoverflow.com/a/ 4809464/542251)) an den Prozess anzuhängen, wie es diesen Code – Liam

5

Ja, das ist normal.

Application_Start() wird von IIS verarbeitet.

Aber alle anderen Methoden, zum Beispiel Session_Start, und alle anderen, außer Application_Start() können normal debuggt werden.

9

Application_Start() wird einmal pro AppDomain aufgerufen. Wenn Sie nicht Ihren Haltepunkt treffen, bedeutet dies wurde das AppDomain bereits erstellt, so wie folgt vorgehen:

  • in Ihrer Schnellstartleiste, gibt es ein Symbol für die VS-Webserver (sein derjenige, der sagt, "Lokaler Host Irgendein Port"). Klicken Sie mit der rechten Maustaste und wählen Sie "Stopp" oder "Schließen". Dies sollte die AppDomain beenden.
    • Wenn Sie IIS verwenden, müssen Sie Ihre Site manuell neu starten.
    • Alternativ ist das Ändern der Webkonfiguration oder der Global.asax-Datei in der Regel ausreichend, um die Anwendungsdomäne neu zu starten.
  • Starten Sie Ihr Debuggen neu, Sie sollten jetzt Ihre Haltepunkte treffen.
7

überprüfen zu debuggen, die Ihre Web-Anwendung im Debug-Modus ist (<compilation debug="true"> in web.config).

Wenn Sie den von VS gestarteten IIS des Entwicklers verwenden, starten Sie ihn einfach neu oder erstellen Sie eine Anwendung neu.

Wenn Sie auf normale IIS sind haben Sie zwei Möglichkeiten:

  1. Für die Web-Site konfiguriert ist, mit der Entwicklung Ordner zu arbeiten (wo Sie VS Web-Projekt bereitgestellt wird) müssen Sie nur Anwendungspool-Set neu starten für diese Website und starten Sie das Debuggen, bevor die erste Anfrage den Server erreicht (Sie können den App-Pool während des Debug-Vorgangs immer neu starten).
  2. Für Website, die in einem anderen Ordner oder sogar auf einem Remote-Server funktioniert, müssen Sie an den Prozess anhängen. Dazu müssen Sie den Remote-Debugger auf dem entfernten Computer oder Ihrem eigenen installiert haben (abhängig vom Speicherort des Webservers) und das Menü Debug - Attach to process verwenden, den Computernamen eingeben und dann einen zu debuggenden Prozess auswählen. Es ist normalerweise eine w3wp.exe, die im verwalteten Modus arbeitet.
+0

läuft, danke für Ihre Antwort. Ich benutze IIS über VS. – mahdiahmadirad

82

Eine einfache Möglichkeit zum Einbrechen Application_Start() ist die System.Diagnostics.Debugger Klasse zu verwenden. Sie können das Abbrechen der Anwendung erzwingen, indem Sie System.Diagnostics.Debugger.Break() einfügen, wo der Debugger unterbrochen werden soll.

void Application_Start(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debugger.Break(); 

    // ... 
} 
2

Löschen Sie die global.asax und fügen Sie eine neue hinzu. In meiner Lösung gab es eine global.asax und eine global.asax.cs.

Alle Methoden (Session_Start, Application_Start, ...) wurden in den Bot-Dateien gespeichert, aber nur die in global.asax wurden berücksichtigt. Also, Breakpoints und Code in der CS tun nichts.
Nur nach dem erneuten Erstellen der Datei hatte die global.asax.cs die entsprechenden Methoden und sie liefen.

+0

Ich folgte den Anweisungen hier: http://rossnelson.blogspot.ca/2005/11/fixing-globalasax-in-aspnet-20.html. Im Allgemeinen, entfernen Sie die global.asax und fügen Sie eine globale Anwendung Klasse, die die Asax mit einem Code hinter Datei neu erstellen, die ich dann betreten kann. Ich laufe auf IIS und es funktioniert gut. – cbeuker

53
  1. Hängen Sie den Debugger an den IIS-Prozess an.
  2. Öffnen Sie die Datei global.asax, und fügen Sie einen Haltepunkt ein.
  3. Fügen Sie der Datei web.config einen Platz hinzu und speichern Sie die Datei (dadurch wird die aktuelle Webanwendung zurückgesetzt);
  4. Refresh/gehen Sie auf eine Webseite auf der Website.
  5. beobachten Sie staunen, wenn der Debugger an Ihrem Haltepunkt stoppt. :)
+1

Dies wird auch als "Berühren der web.config" bezeichnet und kann für verschiedene Szenarien verwendet werden, wenn Sie Ihre Website aktualisieren müssen, ohne IIS zu berühren. Ich kann nicht glauben, dass es mir nicht eingefallen ist. Vielen Dank. – HockeyJ

+0

Ich wünschte, es wäre so einfach. Aber für mich? "Computer sagt nein" – Justin

3

Eine weitere Alternative zu den akzeptierten System.Diagnostics.Debugger.Break(); würde

void Application_Start(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debugger.Launch(); 
    //... 
} 

sein, die den Code nicht brechen sollte und den Debugger auch starten, wenn der Dienst mit unterschiedlichen Rechten gestartet wurden.

+0

das ist schön, ich habe versucht und es hat auch für mich funktioniert ... danke –

0

Erwarten Sie nicht, dass die Funktion Application_Start() sofort aufgerufen wird, indem Sie f5 drücken. Application_Start() wird nur zum Zeitpunkt der ersten Anforderung an die Anwendung aufgerufen. Seltsam, aber wahr.

0

Falls alle Antworten nicht funktioniert, versuchen:

<compilation debug="true" ... /> 

in web.config. ;)