Non riesco a eseguire il debug del file global.asax!È possibile eseguire il debug di Global.asax?
Ho alcuni codici nel metodo Application_Start()
ma quando imposto un punto di interruzione nel metodo, viene ignorato!
È normale?
Non riesco a eseguire il debug del file global.asax!È possibile eseguire il debug di Global.asax?
Ho alcuni codici nel metodo Application_Start()
ma quando imposto un punto di interruzione nel metodo, viene ignorato!
È normale?
Forse si dovrebbe cercare:
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.
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:
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:
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.grazie per la risposta. io uso IIS tramite VS. – mahdiahmadirad
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();
// ...
}
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.
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
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
Vorrei che fosse così semplice. Ma per me? "il computer dice no" – Justin
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.
questo è bello ho provato e ha funzionato anche per me ... grazie –
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.
In caso tutti risposte non funziona, provare:
<compilation debug="true" ... />
in web.config
. ;)
Strano che questo è stato contrassegnato come la risposta ha ancora un rating -2 ... –
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