23

Ho ottenuto un punto di interruzione sulla prima riga di Application_Start(), ma Visual Studio non si interromperà.Impossibile interrompere global.asax/Application_Start

Visual Studio essersi collegato al processo di lavoro di IIS:

Auto-Attach to Process '[2092] w3wp.exe' sulla macchina 'SRD00510' riuscito.

Il mio punto di interruzione nel controller di casa funziona.

aggiornamento

ho provato:

  • iisreset
  • riavviato Visual Studio
  • riavviato.
  • provato a reinstallare ASPNET (aspnet_regiis -i)
+0

Quale versione di IIS? – jrummell

+0

IIS 7.5 in WinSvr 2008 R2 – jgauffin

+0

Prova rightclick su proj. debug> entra in una nuova istanza. In questo modo puoi vedere che cosa sta succedendo dall'inizio ... – jrb

risposta

47

Leggendo la domanda, presumo che si stia utilizzando IIS per il debug, non Visual Studio Development Server.

In questo caso, l'avvio dell'applicazione di debug è complicato, poiché viene richiamato una sola volta all'avvio o al riciclo del pool di applicazioni. Quando Visual Studio si collega al processo, Application_Start è già in esecuzione.

Il trucco è quello di riciclare il pool di applicazioni senza uccidere il processo a cui si è collegati.

procedere come segue:

  1. In Visual Studio (deve essere eseguito come amministratore) impostare il punto di interruzione in global.asax.cs e avviare il debug come al solito (F5). La pagina si apre nel tuo browser web , ma il punto di interruzione non viene raggiunto.
  2. Ora il trucco: con un editor di testo, aprire web.config da dove è servito da IIS, modificarlo (ad esempio, immettere una riga vuota da qualche parte) e salvarlo. A differenza del riciclaggio del pool di applicazioni in IIS, questo consente il riciclo del pool di applicazioni (e quindi l'esecuzione di Application_Start in global.asax.cs la volta successiva che il sito Web è chiamato) senza uccidere il processo a cui si è connessi.
  3. Nel browser Web, ricaricare la pagina. Il punto di interruzione dovrebbe essere colpito ora!

Questo funziona per me (IIS 7.5, VS2015).

+1

Questo funziona ancora con una piccola modifica tra i passaggi 2 e 3. La modifica di web.config impone di interrompere il debug, ma è possibile ricollegare il processo e continuare come indicato. – Danation

+0

Dove impari queste cose? –

+0

@Danation: hai ragione. Non dovresti utilizzare l'istanza di Visual Studio con cui stai eseguendo il debug. Il punto principale è che si modifica web.config sul posto sul disco da dove è servito da IIS. Potrebbe essere una posizione diversa da quella in cui risiede il tuo progetto Visual Studio. Esaminare in IIS dove si trova la directory principale del sito sul disco. Modificata la mia risposta di conseguenza. – Jochen

6

Application_Start() eseguito solo una volta, all'avvio dell'applicazione. Un paio di cose che riavviare l'applicazione sono:

  • web.config cambia
  • riciclare il processo di lavoro - è possibile farlo in Gestione IIS o eseguendo iisreset nella riga di comando.
+0

Ho ucciso w3wp con il task manager e ho provato a cambiare web.config. – jgauffin

+0

Questo è strano ... se sei già collegato, cambiare il web.config dovrebbe farlo. Sei sicuro che il codice al punto di interruzione sia stato eseguito? Puoi spostarlo all'inizio di 'Application_Start()'? – jrummell

+0

Sì, ne sono certo. – jgauffin

14

Inserisci questa riga nel tuo Application_Start().

Debugger.Break(); 

Questo ti presenterà una finestra di dialogo che ti permetterà di selezionare un debugger. Potrebbe essere necessario riavviare il pool di applicazioni.

+1

Questo mi dà una nuova istanza di Visual Studio. – jgauffin

+0

Di solito, si ottiene un modulo "selettore" per selezionare un nuovo VS o VS attualmente in esecuzione. Non lo vedi? – spender

+0

Sì, ma posso selezionare solo una nuova istanza di Visual Studio. – jgauffin

0

Suppongo che tu stia caricando l'applicazione facendo clic sul pulsante "debug" in Visual Studio? Questo è quello che sto facendo (in VS 2012) e vedere problemi simili. Premendo il pulsante per la prima volta si avvia l'applicazione e si raggiunge correttamente il punto di interruzione. Ma sembra che dopo aver smesso di fare il debug l'applicazione continua a funzionare. Quindi, i tentativi futuri di eseguire il debug si collegano semplicemente al processo esistente.
C'è un pulsante "riavvia" accanto al pulsante "interrompi debug", quindi presumo che fare clic su questo almeno cambierebbe le cose. L'app di debug non viene visualizzata nel gestore IIS, quindi non posso fermarla qui. Allo stesso modo, neanche iisreset lo prende.

L'unica cosa che ho scoperto finora è cambiare una riga di codice, forzando quindi lo studio visivo a innescare una build e poi uccide il proc esistente e ricomincia. Un po 'fastidioso se voglio solo passare più volte là.

Non ritengo che questa sia una "risposta" adatta, ma potrebbe essere una soluzione utile per voi finché qualcuno non entra con una risposta reale.

1

La mia soluzione è passare all'utilizzo del 'Visual Studio Development Server' per gestire i problemi della classe dell'applicazione (Global.asax). Al termine, torno a IIS.

0

Ho intorno a questo problema prima in questo modo:

  1. Eseguire un ambiente pulito sulla mia soluzione (Tasto destro del mouse sul nodo della soluzione e clicca pulita)
  2. Chiudi soluzione
  3. File -> Esci su Visual Studio
  4. Se si dispone di più istanze di Visual Studio in esecuzione, uscire da tutte le istanze. Assicurarsi che "devenv.exe" non sia elencato nei processi nel task manager
  5. Eliminare il file di opzioni utente (.suo), di solito nella stessa directory del file della soluzione (.sln)
  6. Riciclare il processo di lavoro IIS o se usando il server di sviluppo, uccidi quel processo

Ora apri la tua soluzione e provala. (Tenere le dita incrociate :))

0

Ogni volta che si esegue un'applicazione per la prima volta, o dire avviare un'applicazione, c'è un ASP.Net Sviluppo Server - Port [numero della porta] che inizia,

Application_Start() viene eseguito una volta nel corso di un'applicazione.

Se si desidera raggiungere il punto di interruzione, è necessario interrompere la porta del server di sviluppo ASP.Net ed eseguire nuovamente l'applicazione.

0

se [2092] w3wp.exe è un servizio che hai fatto, provate questo: servizio di arresto -> ricostruire progetto di servizio -> avviare il servizio ricostruito -> cercare di eseguire il debug