153 votes

Application_Start ne se déclenche pas ?

J'ai une application ASP.NET MVC (beta) sur laquelle je travaille et j'ai du mal à savoir si je fais quelque chose de mal, ou si mon Application_Start dans Global.asax.cs ne se déclenche pas lorsque j'essaie de déboguer l'application.

J'ai placé un point d'arrêt sur une ligne dans mon Application_Start et je m'attends à ce que, lorsque je tente de déboguer l'application, le point d'arrêt soit atteint... mais il ne l'est jamais. Pas après avoir réinitialisé IIS, pas après avoir redémarré, jamais. Est-ce que quelque chose m'échappe ? Pourquoi cette méthode n'est-elle jamais appelée ?

0 votes

Votre page global.asax hérite-t-elle de la classe globale dans laquelle se trouve votre méthode ?

0 votes

J'ai rebondi sur des cas où le global.asax était tout simplement absent. Cela vaut donc la peine de vérifier :-)

189voto

MemeDeveloper Points 1513

Note : une belle une alternative simple à l'utilisation du serveur intégré "Visual Studio Development Server". o IIS Express (par exemple, parce que vous êtes développer contre IIS et avoir des paramètres particuliers dont vous avez besoin pour le bon fonctionnement de votre application) est de rester simplement en cours d'exécution dans IIS (j'utilise le serveur Web personnalisé + entrée dans le fichier hosts + liaison IIS au même domaine).

  1. attendez que la session de débogage démarre ok
  2. il suffit alors de modifier le web.config racine à l'aide d'un espace et de sauvegarder le fichier fichier
  3. rafraîchissez votre page (Ctrl + F5)

Votre point d'arrêt devrait être atteint correctement et vous pouvez continuer à déboguer dans votre fichier habitat naturel de l'IIS . Super !

0 votes

C'est une brillante accroche de recyclage d'AppDomain. Merci ! !

0 votes

Il n'y a plus de Visual Studio Development Server. stackoverflow.com/questions/19676527/

1 votes

@mac10688 vrai, mais il y a toujours "IIS Express" qui n'est généralement pas l'environnement de production. J'ai mis à jour la réponse en conséquence, merci.

87voto

Gregory A Beamer Points 10975

Si c'est dans IIS, l'application peut démarrer avant que le débogueur ne soit attaché. Si c'est le cas, je ne suis pas sûr que vous puissiez mettre le thread en veille suffisamment longtemps pour que le débogueur s'y attache.

Dans Visual Studio, vous pouvez attacher le débogueur à un processus. Pour ce faire, cliquez sur Debug >> Attach to process. Attachez le processus au navigateur, puis lancez votre application. Pour plus de sécurité, redémarrez ensuite IIS et lancez le site. Je ne suis pas convaincu à 100% que cela résoudra le problème, mais c'est beaucoup mieux que de déclencher un thread sleep dans App_Start.

Une autre option consiste à héberger temporairement le serveur web intégré jusqu'à ce que vous ayez fini de déboguer le démarrage de l'application.

21 votes

Pour développer - (dans VS2010, en utilisant le type de projet MVC 3) cliquez avec le bouton droit de la souris sur le projet web > propriétés > web (onglet) et assurez-vous que le bouton radio "Use Visual Studio Development Server" est sélectionné. Ensuite, vos points d'arrêt Application_Start devraient être atteints sans problème.

0 votes

Merci @MemoDeveloper ! ! C'est superbe ! !

2 votes

Ahhhhhhh mannnnn, j'ai perdu quelques heures. Encore ! Merci pour cette réponse :)

63voto

Jochen Scharr Points 121

Ce qui suit est utile dans tous les cas (peu importe que vous utilisiez IIS, Cassini ou autre) :

  1. Définissez votre point d'arrêt dans Application_Start
  2. Démarrer le débogage (le point d'arrêt n'est probablement pas atteint) -> une page est affichée dans le navigateur.
  3. Modifiez le fichier web.config (par exemple, entrez une ligne vide) et sauvegardez-le.
  4. Rechargez la page dans le navigateur -> le point d'arrêt est atteint !

Pourquoi cela fonctionne-t-il ? Lorsque le web.config est modifié, le serveur web (IIS, Cassini, etc.) effectue un recyclage, mais dans ce cas (pour une raison quelconque), le processus reste le même, donc vous restez attaché à lui avec le débogueur (Visual Studio).

3 votes

Clone, deux ans plus tard de stackoverflow.com/a/7655582/11635 - envisager de supprimer et de mettre toute information supplémentaire dans un commentaire

1 votes

En fait, @RubenBartelink, je pense que cette réponse est plus claire que l'autre, en raison de la formulation et des explications supplémentaires.

1 votes

@HeribertoLugo Je suis d'accord avec cela - 50 upvotes, c'est difficile d'être en désaccord total avec la réponse (Néanmoins, je serais ravi de modifier l'autre réponse pour combler l'écart si quelqu'un a le temps et le contexte ; cela fait un certain temps que je n'ai pas utilisé de débogueur sur IIS !)

23voto

Flores Points 1184

J'ai moi aussi des problèmes avec les points d'arrêt dans application_start avec IIS une application hébergée. Une bonne solution consiste à utiliser Debugger.Break() ; dans le code au lieu du point d'arrêt de VS.

2 votes

Je pense que le fait de ne pas atteindre le point d'arrêt a quelque chose à voir avec l'exécution de votre pool d'applications en mode pipeline intégré. L'utilisez-vous ?

10voto

Dao Points 1254

J'ai exactement le même problème. J'ai fait beaucoup de renommage dans ma solution. Après cela, j'ai deux applications web qui ne fonctionnent pas et plusieurs autres applications web qui fonctionnent bien. J'ai reçu une erreur disant que j'ai de mauvaises routes. Lorsque j'ai essayé de configurer le point de rupture dans Application_Start puis redémarrer IIS, VS n'a pas interrompu l'exécution. Avec des applications web utilisables, la rupture fonctionnait. Ensuite, je me suis souvenu que "clean solution" et "rebuild" ne suppriment pas les assemblages laissés après le renommage. Et c'était la solution ! J'ai nettoyé manuellement bin des répertoires de mes applications Web boguées, puis j'ai vu une nouvelle erreur dans Global.asax Inherits="" a été référencé comme une ancienne dll. Je l'ai changé sur la nouvelle et la rupture a commencé à fonctionner. Supposons que, pendant le renommage, Global.asax n'a pas été mis à jour, et que IIS a pris l'ancien assemblage (avec de mauvaises routes) pour démarrer l'application.

1 votes

Wow, c'était une douleur à trouver ! C'est pour le conseil !

1 votes

@Dao Vraiment, c'est génial, merci ;) J'ai perdu quelques heures sur ce sujet, j'aurais dû trouver votre réponse avant :)

0 votes

C'était exactement mon problème - merci ! Je devenais fou. J'étais en train de refactoriser une ancienne application, et après avoir renommé le projet web, je ne parvenais pas à lancer le moindre code. Pire encore, VS ne semble pas vous laisser éditer le fichier Global.asax J'ai donc dû l'éditer dans Notepad.

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