2009-12-25 14 views

risposta

5

Forse si dovrebbe cercare:

  • arresto server di sviluppo nella barra delle applicazioni
  • commutazione della configurazione dal rilascio di eseguire il debug
+5

Strano che questo è stato contrassegnato come la risposta ha ancora un rating -2 ... –

+0

Ha una valutazione negativa perché è sbagliato. È corretto dire che devi essere in debug (o altrimenti non hai i file pdb) e devi catturare il server all'avvio (perché questo è quando viene eseguito quel codice) ma non sarai in grado da allegare al processo. È necessario un processo in esecuzione per collegare il debugger, il codice global.asax viene eseguito nei primi millisecondi di questo processo, iniziando così è letteralmente impossibile (senza utilizzare la [risposta corretta sotto] (https://stackoverflow.com/a/ 4809464/542251)) da allegare al processo mentre esegue questo codice – Liam

5

Sì, è normale.

Application_Start() viene elaborato da IIS.

Ma tutti gli altri metodi, ad esempio Session_Start e tutti gli altri, ad eccezione di Application_Start(), possono essere debug normalmente.

9

Application_Start() viene invocato una volta per AppDomain. Se non sei colpire il vostro punto di interruzione, significa che il dominio di applicazione è già stato creato, in modo da effettuare le seguenti operazioni:

  • nella vostra barra di avvio rapido, v'è un'icona per il web server VS (suo quello che dice "Host locale alcune porte"). Fare clic con il tasto destro e selezionare "Stop" o "Chiudi". Questo dovrebbe uccidere l'AppDomain.
    • Se si utilizza IIS, è necessario riavviare il sito manualmente.
    • In alternativa, la modifica della configurazione Web o del file Global.asax è in genere sufficiente per riavviare AppDomain.
  • Riavvia il tuo debug, dovresti premere i tuoi breakpoint ora.
7

Verificare che l'applicazione web è in modalità di debug (<compilation debug="true"> in web.config).

Se si utilizza IIS dello sviluppatore avviato da VS, è sufficiente riavviarlo o ricostruire l'applicazione.

Se siete su IIS normale si hanno due opzioni:

  1. per sito web è configurato per funzionare con la cartella di sviluppo (dove si VS progetto web viene distribuito) è sufficiente riavviare il pool di applicazioni insieme per quel sito Web e avviare il debug prima che la prima richiesta raggiunga il server (è sempre possibile riavviare il pool di applicazioni durante il debug).
  2. Per il sito Web che funziona su un'altra cartella o anche su server remoto, è necessario allegare al processo. Per fare questo è necessario il debugger remoto installato sulla macchina remota o il proprio (dipende dalla posizione del server Web) e utilizzare il menu Debug - Attach to process, immettere il nome del computer e quindi selezionare un processo per eseguire il debug. Di solito è un w3wp.exe che funziona in modalità gestita.
+0

grazie per la risposta. io uso IIS tramite VS. – mahdiahmadirad

82

Un modo semplice per interrompere Application_Start() è utilizzare la classe System.Diagnostics.Debugger. È possibile forzare l'interruzione dell'applicazione inserendo System.Diagnostics.Debugger.Break() in cui si desidera interrompere il debugger.

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

    // ... 
} 
2

Eliminare il global.asax e aggiungerne uno nuovo. Nella mia soluzione, c'è stato un global.asax e un global.asax.cs.

Tutti i metodi (Session_Start, Application_Start, ...) sono presenti nei file bot, ma sono stati considerati solo quelli nello global.asax. Quindi, i punti di interruzione e il codice in cs non fanno nulla.
Solo dopo aver ricreato il file, lo global.asax.cs aveva i metodi appropriati e venivano eseguiti.

+0

Ho seguito le istruzioni qui: http://rossnelson.blogspot.ca/2005/11/fixing-globalasax-in-aspnet-20.html. Fondamentalmente, rimuovere global.asax e aggiungere una classe di applicazione globale che ricrea l'asax con un codice dietro il file che posso quindi inserire. Sono in esecuzione su IIS e funziona bene. – cbeuker

53
  1. Collegare il debugger al processo IIS.
  2. Aprire il file global.asax e inserire un punto di interruzione.
  3. Aggiungere uno spazio al file web.config e salvare il file (ciò causa la reimpostazione dell'applicazione Web corrente);
  4. Aggiorna/accedi a una pagina Web sul sito.
  5. guardare con stupore quando il debugger si ferma al punto di interruzione. :)
+1

Questo è anche noto come "Touching the web.config" e può essere utilizzato per diversi scenari quando è necessario aggiornare il sito senza toccare IIS. Non posso credere che non mi sia venuto in mente. Grazie. – HockeyJ

+0

Vorrei che fosse così semplice. Ma per me? "il computer dice no" – Justin

3

Un'altra alternativa per accettato la System.Diagnostics.Debugger.Break(); sarebbe

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

che non dovrebbe rompere il codice e dovrebbe iniziare il debugger, anche se il servizio sono stati avviati con diritti diversi.

+0

questo è bello ho provato e ha funzionato anche per me ... grazie –

0

Non aspettare che la funzione Application_Start() venga chiamata immediatamente premendo f5. Application_Start() viene richiamato solo al momento della prima richiesta all'applicazione. Strano ma vero.

0

In caso tutti risposte non funziona, provare:

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

in web.config. ;)

Problemi correlati