2011-10-05 13 views
9

Ho un po 'di codice nella mia app ASP.NET in C# che si trova nel file di codice Global.asax.cs. Nel Application_Start, Session_Start e Application_Begin Request ho impostato alcuni punti di interruzione. Tuttavia nessuno di questi è mai stato colpito. Sto lavorando sulla mia macchina locale con VS8.punto di interruzione globale.asax non ha colpito

Ecco che cosa ho provato:

  • fermato l'ASP Dev Server
  • eliminati tutti i file temporanei di ASP.NET
  • Creato nuovo Global.asax
  • Chiusura VS e l'apertura back up
  • Pulire e ricostruire il progetto

Dopo aver provato il mio dopo questi, i punti di interruzione non colpiranno.

Qualche idea del motivo?

+0

perché non si tenta di mettere un po 'System.Diagnostics.Debug.WriteLine (...); in ognuno di questi eventi e controllare la finestra di output mentre si esegue la soluzione da Visual Studio? Vedi qualcosa? –

+2

Vedi [questa risposta] (http://stackoverflow.com/questions/1960651/it-is-possible-to-debug-global-asax/4809464#4809464) - ti aiuta nel tuo caso? –

+0

Potresti incollare le dichiarazioni effettive di questi metodi? Forse li hai dichiarati in modo errato. –

risposta

24

Ho incontrato questo stesso problema. Suppongo che tu stia utilizzando il tuo IIS locale invece del VS Development Server. In tal caso, non sarà possibile eseguire il debug/passaggio di questo codice nel file Global.asax.cs poiché al momento dell'aggiunta del debugger, questo codice è già stato eseguito in IIS. Tuttavia, se si utilizza il server Dev, si ha la possibilità di accedere a questo codice poiché il debugger sarà già collegato.

Quindi, modificare il server nelle proprietà del progetto per utilizzare Visual Studio Development Server.

Questo può essere trovato facendo clic con il pulsante destro del mouse sul progetto in Visual Studio>Project Properties>Web tab>Use Visual Studio Development Server.

+0

Questo ha funzionato alla grande per me. Dovrebbe essere una risposta accettata – Kevin

+4

In VS 2013 Visual Studio Development Server è mancante, anche la risposta @Ofiris non aiuta –

4

Ciò che mi ha aiutato è stato quello di aggiungere:

System.Diagnostics.Debugger.Break(); a tale metodo Application_Start().

+0

Errore AppPool. – QMaster

2

su un progetto su cui stavo lavorando, l'opzione "Start programma esterno" è stato selezionato nella scheda:

Visual Studio> Proprietà progetto> Web

Questo stava causando il breakpoint per non essere colpito.

La modifica di "Avvia azione" su "Pagina corrente" ha risolto il problema per me.

0

Come indicato in un'altra risposta, il codice Global.asax verrà eseguito prima che il debugger abbia la possibilità di collegarsi. Per aggirare il problema è possibile avviare il debugging, quindi andare in IIS e arrestare/avviare l'applicazione, che dovrebbe quindi consentire al debugger di riprendere il riavvio.

0

Ho avuto questo problema due volte. Il primo progetto mi è successo, sono andato su Proprietà progetto-> Build-> Avanzate ... e selezionato "completo" dal menu a discesa Informazioni di debug.

La seconda volta, i punti di interruzione nel mio global.asax non vengono colpiti, ma ha emesso questo avviso se aleggiavo sopra il punto di interruzione: "Il codice sorgente è diverso dalla versione originale."

Alla fine ho capito che in questo caso, avevo fatto una copia di backup di questo progetto per preservare il codice e stava lavorando con la copia. Anche se era in una cartella diversa, stava ancora usando la DLL per la directory virtuale dell'originale: http://localhost:4952/

Così ho cambiato che in Project Proprietà-> Web-> Progetto URL ho appena cambiato la porta a http://localhost:49523/ e ha funzionato

e mi ha spinto a creare la directory virtuale.. , Ho risposto di si e non ho più avuto problemi con i punti di interruzione da.

1

Se si ou non si vuole utilizzare Visual Studio Development Server e utilizzare IIS, è possibile effettuare le seguenti operazioni (testato in VS2015 professionale)

1) pool di applicazioni in uno stato di esecuzione - fare in modo che utilizzata Pool di applicazioni è in esecuzione accedendo una pagina dalla tua app Web (potrebbe essere interrotta a causa di un timeout di inattività).

2) Attach to Process-Ctrl-Alt-P o Debug -> Attach to Process -> Lookup il processo w3wp che corrisponde alla vostra applicazione.

Il collegamento al processo può essere notevolmente accelerato utilizzando ReAttach extension che crea scorciatoie per i processi collegati di recente.

3) pool di applicazioni di riciclo - fare in modo che il pool di applicazioni ricicla da entrambi IIS che entrano e riciclaggio o ancora più veloce, inserendo web.config, fare un cambiamento senza effetto (mettere un po 'al di fuori bianco di tag) e salvandolo

4) Avvia debug - Eseguire una richiesta su qualsiasi pagina dall'applicazione Web per forzarne l'inizializzazione. Si dovrebbe essere in grado di effettuare e colpire i punti di interruzione da uno qualsiasi dei metodi di avvio nel Global.asax

protected void Application_Start() 
void Application_BeginRequest(Object sender, EventArgs e) 
protected void Session_Start(object sender, EventArgs e) 
+0

Non perfetto ma utile: inserire web.config, apportare una modifica senza effetto (mettere un po 'di spazio all'esterno dei tag) e salvarlo. Meritato +1 :) – QMaster

Problemi correlati