73 votes

Pourquoi l'événement Application_Start () n'est-il pas déclenché lorsque je débogue mon application ASP.NET MVC?

J'ai actuellement les routines suivantes dans mon Global.asax.cs le fichier:

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);
}

Routage débogueur...

Quand j'ai frappé F5, l'application déclenche jusqu'à et à moins que j'ai une vue nommée Index.aspx dans la ~/Views/Home/ le dossier, je reçois la "Vue manquant" message d'erreur, bien que j'ai ré-défini l'itinéraire par défaut et supprimé l' HomeController. Je m'attends à obtenir le routage débogueur, et si ce n'est qu'au moins une demande d' ~/Views/Arrangement/Index.aspx.
Un point d'arrêt sur RegisterRoutes(Routetable.Routes); n'est jamais atteint lors du débogage.

J'ai essayé de construction, de reconstruction, le redémarrage de VS, le nettoyage, la reconstruction de nouveau, etc, mais rien ne semble fonctionner. Pourquoi ne pas l'exécution de l'application de la version actuelle du code?

114voto

Vishal Seth Points 986

J'ai trouvé la réponse suivante sur forums.asp.net:

Êtes-vous à l'aide de IIS7 que le serveur ou le serveur web intégré? J'ai remarqué lors de l'utilisation de IIS7 que si vous démarrez le débogueur, laissez une page, alors le changement Global.asax (le fichier de marquage, pas de code-behind), tandis que le débogueur est toujours en cours d'exécution, puis actualisez la page, des points d'arrêt dans Application_Start seront frappés.

Je pense que ce qui se passe c'est qu'en appuyant sur "play", VS juste de démarrer le processus, puis l'attache à elle, mais au moment où il s'y attache le début de l'événement a déjà été exécuté. En changeant Mondiale.asax, vous entraîner à l'application de redémarrer et depuis le débogueur est déjà fixé, vous pouvez frapper le point d'arrêt. Pas une bonne solution, mais il semble fonctionner.

C'est ce qui se passe dans mon cas.

34voto

JotaBe Points 8950

Ajoutez un System.Diagnostics.Debugger.Break(); à Application_Start (). Cela forcera un point d'arrêt.

Cette ligne doit être commentée pour éviter le point d'arrêt à atteindre et #ifdef debug pour être sûre de ne jamais arriver en production.

18voto

John Rasch Points 28874

Je pense que vous devez arrêter / arrêter le serveur de débogage local pour que l'événement Application_Start() se déclenche à nouveau ... vous devriez pouvoir cliquer dessus avec le bouton droit de la souris dans la barre d'état système et choisir "Arrêter".

6voto

Tomas Lycken Points 23432

J'ai trouvé le problème:

Cette application MVC faisait partie d'une solution plus large, dans lequel j'ai eu à un ensemble de points d'un autre projet à construire un environnement x86 (je suis en x64). Quand je l'ai fait, apparemment, tous les autres projets, même ceux qui ont été ajoutés plus tard, ont été mis de ne pas construire sur Ctrl+Shift+B, et je suppose que c'est pourquoi le débogueur n'ai pas touché mon point d'arrêt.

Solution:

Allez dans la construction de propriétés (clic droit sur la Solution, sélectionnez propriétés, puis sélectionnez générer sur le menu de gauche), et mettez une coche dans la case à cocher générer à côté du nom du projet dans la liste.

4voto

Ci-dessous la technique a fonctionné pour moi:
Solution Simple est de toucher mondiale.asax après le débogueur est attaché afin de forcer une application à recycler. Puis au cours de la prochaine demande, le point de rupture que vous définissez sur Application_Start seront frappés.

J'ai trouvé ça ici:
http://connect.microsoft.com/VisualStudio/feedback/details/634919/cannot-debug-application-start-event-in-global-asax

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X