2009-06-09 12 views
56

actualmente tienen las siguientes rutinas en mi archivo Global.asax.cs:¿Por qué no se desencadena el evento Application_Start() cuando depuro mi aplicación 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 ...

cuando golpeo F5, los fuegos de la aplicación y menos que tenga una vista denominada Index.aspx en la carpeta ~/Views/Home/, Aparece el mensaje de error "Ver que falta", aunque redefiní la ruta predeterminada y eliminé el HomeController. Esperaría obtener el depurador de enrutamiento, y si no, al menos una solicitud para ~/Views/Arrangement/Index.aspx.
Un punto de interrupción en RegisterRoutes(Routetable.Routes); nunca se golpea al depurar.

He intentado construir, reconstruir, reiniciar VS, limpiar, reconstruir de nuevo, etc., pero nada parece funcionar. ¿Por qué la aplicación no ejecuta la versión actual del código?

+0

Thomas, que es un problema muy interesante :) (1) –

+0

¿Está usted en el desarrollo del servidor web? Comprueba si el mismo problema se presenta con tu aplicación trabajando bajo IIS y luego con una nueva mvcapp vacía. –

+0

La depuración en IIS en lugar del servidor web de desarrollo no ayudó. Un punto de quiebre en la misma línea en una nueva aplicación MVC fue golpeado, por lo que podemos reducirlo a algo específico del proyecto. ¿Qué podría ser? –

Respuesta

6

he encontrado el problema:

Esta aplicación MVC fue parte de una solución más amplia, en la que tuve en un momento establecer otro proyecto de construcción de un entorno x86 (x64 estoy corriendo). Cuando lo hice, al parecer todos los demás proyectos, incluso los que se agregaron más tarde, se configuraron para no compilar en Ctrl+Shift+B, y supongo que es por eso que el depurador no llegó a mi punto de interrupción.

Solución:

Ir en la solución de construir propiedades (haga clic derecho en la solución, seleccione Propiedades y seleccione Generar en el menú de la izquierda), y poner una marca en la casilla Generar situado junto al nombre del proyecto en la lista.

18

Creo que tiene que cerrar/detener el servidor de depuración local para que el evento Application_Start() vuelva a activarse ... debería poder hacer clic derecho en la bandeja del sistema y seleccionar "Parar".

+0

Lo hice.E incluso hoy, después de apagar la computadora de la noche a la mañana, el problema persiste ... –

+5

Brillante. (+1) –

94

me encontré con la siguiente respuesta on forums.asp.net:

¿Está utilizando IIS7 que el servidor o el servidor web incorporado? Cuando utilicé IIS7 noté que si iniciaba el depurador, dejaba que apareciera una página, luego cambiaba Global.asax (el archivo de marcado, no el código subyacente) mientras el depurador todavía se está ejecutando, luego actualiza la página, los puntos de interrupción en Application_Start serán golpear.

Creo que lo que está sucediendo es que presionando "reproducir", VS simplemente activa el proceso, luego se conecta a él, pero para cuando se une a él, el evento de inicio ya se ha ejecutado. Al cambiar Global.asax, hace que la aplicación se reinicie y, como el depurador ya está conectado, puede alcanzar el punto de interrupción. No es una gran solución, pero parece funcionar.

Eso es lo que estaba sucediendo en mi caso.

+1

+1 como consejo útil para los usuarios de IIS7. Tal vez tenga un enrutamiento de subdominio u otro motivo por el que no pueda usar el servidor web integrado o si hay algún problema con la sugerencia anterior, p. con la edición de una parte de la clase que desea depurar, de otra manera para forzar el reinicio de la aplicación fácilmente en VS es editar web.config vea mi comentario aquí [link] (http://stackoverflow.com/questions/ 641148/application-start-not-fuego/7655582 # 7655582) – MemeDeveloper

+1

La respuesta que ha citado se encuentra aquí: http://forums.asp.net/t/1233037.aspx/1 –

+2

Briliant, funciona como un amuleto. –

21

Agregue System.Diagnostics.Debugger.Break(); a Application_Start().
Esto forzará un punto de interrupción.

Esta línea debe comentarse para evitar el punto de interrupción y #ifdef debug para asegurarse de que nunca llegue a producción.

+1

Suena como una mala práctica. ¿Por qué querrías atestar tu código con instrucciones para el IDE? –

+6

No es una práctica muy mala en absoluto. Es una instrucción simple para facilitar la depuración. Usar '#ifdef debug' le permite evitar que se compile en la versión de producción. Y puede usarlo temporalmente mientras necesita depurar y finalmente eliminarlo. Por favor, háganme saber cuáles son las mejores prácticas de 'Debugger.Launch()' y 'Debugger.Break()'. Estos métodos de utilidad son extremadamente útiles para ayudar a depurar cosas difíciles de depurar, como complementos de VS, servicios de Windows, etc., sin tener que adjuntar manualmente el proceso en cada ejecución. Algunas personas prefieren ser puristas. Prefiero ser práctico. – JotaBe

+0

Intenté hacer esto en Global.asax y no pude hacerlo funcionar. YMMV. –

3

En mi caso, el problema era entre la silla y el teclado. Después de cambiar el nombre del ensamblado del proyecto mvc, olvidé actualizar Global.asax para señalar a la clase correcta. A fin de comprobar los "hereda" en Global.asax (en Visual Studio haga clic derecho en Global.asax -> Vista de marcado)

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

si realmente se adapte a su clase Global.asax.cs/declaración de espacio

4

en mi caso fue que el uso de

IIS servidor Web local en la configuración del proyecto web

y me cambio a uso de Visual Studio servidor de desarrollo de, y esto trabajos.

4

Debajo de la técnica funcionó para mí:
Solución simple es tocar global.asax después de que se adjunta el depurador para forzar el reciclaje de una aplicación. Luego, durante la próxima solicitud, se aplicará el punto de interrupción que estableció en Application_Start.

Me encontraron esta aquí:
http://connect.microsoft.com/VisualStudio/feedback/details/634919/cannot-debug-application-start-event-in-global-asax

+0

Una solución más es poner Debugger.Break(); –

3

golpeo con el mismo problema hoy y estaba usando IIS local.

Creo que esto se debe a que debido a la forma en que se carga la página. Todo lo que necesita hacer es colocar un punto de interrupción en Application_Start. Ejecute la aplicación (en mi caso, se llevó a la pantalla de inicio de sesión) y luego vaya a web.config. Edítelo agregando algunos espacios. y luego actualice en el navegador. Esto llegará al punto de interrupción en Application_Start.

+1

Esta es la mejor respuesta para este post en el foro. Tan pronto como guardé la configuración web, el depurador tocó el evento 'application_start'. – Sunil

7

El problema es Application_Start() dispara primero y luego se conecta el depurador.

Por lo tanto, el objetivo es hacer algo que ocasione que Application_Start() se active de nuevo mientras aún se está ejecutando. Para fines de depuración, simplemente ejecute el depurador como lo hace normalmente, edite (por ejemplo, agregue una nueva línea) y guarde el archivo web.config.

0

Tal vez mi solución ayudará a alguien:

  1. Detener el depurador.
  2. Actualice el código RegisterRoutes (ejemplo - add \ remove int i = 1;).
  3. Reconstruir.
  4. Coloque un punto de inflexión en RegisterRoutes.
0

Acabo de tener este problema y cambié de IIS local a IIS Express en las propiedades del proyecto -> Web de tipo que fuera

0

proyecto -> propiedades -> Web

de verificación "código nativo ".

enter image description here

Cuestiones relacionadas