2009-06-09 7 views
56

Al momento ho le seguenti routine nel mio file Global.asax.cs:Perché l'evento Application_Start() non si attiva quando eseguo il debug della mia app ASP.NET MVC?

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.MapRoute(
     "Default",           
     "{controller}/{action}/{id}",      
     new { controller = "Arrangement", action = "Index", id = "" } 
    ); 
} 

protected void Application_Start() 
{ 
    RegisterRoutes(RouteTable.Routes); 
    // Debugs the routes with Phil Haacks routing debugger (link below) 
    RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes); 
} 

Routing debugger ...

Quando mi ha colpito F5, i fuochi di applicazione e se non ho una vista con nome Index.aspx nella cartella ~/Views/Home/, Viene visualizzato il messaggio di errore "Visualizza mancante", anche se ho ridefinito la route predefinita e rimosso lo HomeController. Mi aspetterei di ottenere il debugger di routing, e se non quello almeno una richiesta di ~/Views/Arrangement/Index.aspx.
Un punto di interruzione su RegisterRoutes(Routetable.Routes); non viene mai raggiunto durante il debug.

Ho provato a costruire, ricostruire, riavviare VS, pulire, ricostruire di nuovo ecc., Ma niente sembra funzionare. Perché l'applicazione non esegue la versione corrente del codice?

+0

Thomas, è un problema molto interessante :) (+1) –

+0

Siete sul server web di sviluppo? Controlla se lo stesso problema si presenta con la tua app che funziona con IIS e poi con il nuovo mvcapp vuoto? –

+0

Il debug su IIS invece del server web di sviluppo non ha aiutato. Un punto di interruzione sulla stessa linea in una nuovissima applicazione MVC è stato effettivamente raggiunto, quindi possiamo ridurlo a qualcosa di specifico del progetto. Cosa potrebbe essere? –

risposta

6

ho trovato il problema:

Questa applicazione MVC è stato parte di una soluzione più ampia, in cui ho avuto a un certo punto impostare un altro progetto per la costruzione di un ambiente x86 (sto correndo x64). Quando l'ho fatto, apparentemente tutti gli altri progetti, anche quelli aggiunti in seguito, non erano stati creati su Ctrl+Shift+B, e suppongo che sia per questo che il debugger non ha raggiunto il mio punto di interruzione.

Soluzione:

Vai nella soluzione costruzioni Proprietà (clic destro Solution, selezionare Proprietà, quindi selezionare Genera dal menu a sinistra), e mettere un segno di spunta nella casella di controllo Genera accanto al nome del progetto in la lista.

18

Credo che sia necessario arrestare/arrestare il server di debug locale in modo che l'evento Application_Start() si avvii di nuovo ... dovresti essere in grado di fare clic con il pulsante destro del mouse nella barra delle applicazioni e scegliere "Stop".

+0

L'ho fatto.E anche oggi - dopo aver spento il computer durante la notte - il problema persiste ... –

+5

Brillante. (+1) –

94

ho trovato la seguente risposta on forums.asp.net:

Si sta utilizzando IIS7 come il server o il server Web incorporato? Ho notato che quando si utilizza IIS7, se si avvia il debugger, si apre una pagina, quindi si modifica Global.asax (il file di markup, non code-behind) mentre il debugger è ancora in esecuzione, quindi si aggiorna la pagina, i breakpoint in Application_Start saranno colpire.

Penso che quello che sta succedendo è che premendo "gioca", VS avvia appena il processo, quindi si attacca ad esso, ma nel momento in cui si attacca ad esso l'evento di inizio è già stato eseguito. Modificando Global.asax, si fa riavviare l'app e dal momento che il debugger è già collegato, è possibile raggiungere il punto di interruzione. Non è una grande soluzione, ma sembra funzionare.

Questo è ciò che stava accadendo nel mio caso.

+1

+1 come suggerimento utile per gli utenti di IIS7. Forse hai il routing del dominio secondario o qualche altra ragione per cui non puoi utilizzare il web server integrato o se ci sono problemi con il suggerimento di cui sopra - ad es. con la modifica di parte della classe che si desidera eseguire il debug, l'altro modo per forzare un riavvio dell'app facilmente in VS è modificare web.config vedere il mio commento qui [collegamento] (http://stackoverflow.com/questions/ 641148/application-start-not-firing/7655582 # 7655582) – MemeDeveloper

+1

La risposta che hai citato si trova qui: http://forums.asp.net/t/1233037.aspx/1 –

+2

Briliant, funziona come un fascino. –

21

Aggiungi System.Diagnostics.Debugger.Break(); a Application_Start().
Questo forzerà un punto di interruzione.

Questa riga deve essere commentata per evitare il punto di interruzione su happern e #ifdef debug per assicurarsi che non arrivi mai in produzione.

+1

Sembra una pessima pratica: perché dovresti ingombrare il tuo codice con le istruzioni per l'IDE? –

+6

Non è affatto una cattiva pratica. È una semplice istruzione per facilitare il debugging. L'uso di '#ifdef debug' consente di evitare che venga compilato nella versione di produzione. Ed è possibile utilizzarlo temporaneamente mentre è necessario eseguire il debug e infine eliminarlo. Per favore, fammi sapere che sono le migliori pratiche di 'Debugger.Launch()' e 'Debugger.Break()'. Questi metodi di utilità sono estremamente utili per aiutare a eseguire il debug di cose har-to-debug come componenti aggiuntivi VS, Servizi Windows e così via, senza dover manualmente allegare il processo ad ogni esecuzione. Alcune persone preferiscono essere puristi. Preferisco essere pratico. – JotaBe

+0

Ho provato a farlo in Global.asax e non sono riuscito a farlo funzionare. YMMV. –

3

Nel mio caso il problema era tra sedia e tastiera - dopo aver rinominato l'assembly del progetto mvc, ho dimenticato di aggiornare Global.asa per indicare la classe corretta. Così controllare le "Inherits" in Global.asax (in Visual Studio fare clic destro su Global.asax -> Visualizza Markup)

<%@ Application Codebehind="Global.asax.cs" 
    Inherits="Monster.MgsMvc.Web.MvcApplication" 
    Language="C#" %> 

se corrisponde veramente la classe Global.asax.cs/dichiarazione dello spazio dei nomi

4

nel mio caso ero io usando

Web server IIS locale nelle impostazioni di progetto web

e cambiare per utilizzare Visual Studio Development Server, e questo lavori.

4

Sotto la tecnica ha funzionato per me:
Soluzione semplice è toccare global.asax dopo che il debugger è stato collegato per forzare il riciclo di un'applicazione. Quindi durante la richiesta successiva, verrà colpito il punto di interruzione impostato su Application_Start.

ho trovato questo qui:
http://connect.microsoft.com/VisualStudio/feedback/details/634919/cannot-debug-application-start-event-in-global-asax

+0

Un'altra soluzione è stata messa in Debugger.Break(); –

3

ho colpito con lo stesso problema di oggi e stavo usando IIS locale.

Credo sia dovuto al modo in cui la pagina è stata caricata. Tutto quello che devi fare è mettere un breakpoint in Application_Start. Esegui l'applicazione (nel mio caso, ha richiesto la schermata di accesso) e poi vai su web.config. Modificalo aggiungendo alcuni spazi. e quindi aggiornare in Browser.that colpirà il punto di interruzione su Application_Start.

+1

Questa è la migliore risposta a questo post del forum. Non appena ho salvato la configurazione web, l'evento 'application_start' è stato colpito dal debugger. – Sunil

7

Il problema è rappresentato dai trigger Application_Start(), quindi il debugger si connette.

Quindi l'obiettivo è fare qualcosa che possa causare il trigger Application_Start() mentre è ancora in esecuzione. Per scopi di debug, esegui il debugger come fai normalmente, quindi modifica (ad esempio aggiungi una nuova riga) e salva il file web.config.

0

Forse la mia soluzione aiuterà qualcuno:

  1. Arrestare il debugger.
  2. Aggiornare il codice RegisterRoutes (esempio: aggiungere \ rimuovere int i = 1;).
  3. Ricostruisci.
  4. Inserire un punto di interruzione in RegisterRoutes.
0

Ho appena avuto questo problema e scambiato da IIS locale a IIS Express proprietà del progetto -> Web per risolvere la cosa

0

progetto -> Proprietà -> web

controllo "codice nativo ".

enter image description here

Problemi correlati