asp.net-mvc debugging compilation

¿Por qué el evento Application_Start() no se dispara cuando depuro mi aplicación ASP.NET MVC?



asp.net-mvc debugging (12)

Actualmente tengo las siguientes rutinas en mi archivo Global.asax.cs :

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

Depurador de enrutamiento ...

Cuando Index.aspx F5 , la aplicación se Index.aspx y, a menos que tenga una vista llamada Index.aspx en la carpeta ~/Views/Home/ , Index.aspx el mensaje de error "Ver que falta", aunque Index.aspx 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 cuando se depura.

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?


Acabo de tener este problema y lo cambio de Local IIS a IIS Express en las propiedades del proyecto -> web para solucionarlo


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

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


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



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

Por lo tanto, el objetivo es hacer algo que provoque que Application_Start() active nuevamente mientras todavía 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.


En mi caso, el problema era entre la silla y el teclado: después de cambiar el nombre del ensamblaje del proyecto mvc, olvidé actualizar Global.asax para que apuntara a la clase correcta. Así que revisa las "Heredas" en Global.asax (en el estudio visual, haz clic derecho en Global.asax -> Ver marca)

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

si realmente coincide con su declaración de clase / espacio de nombres Global.asax.cs


En mi caso, estaba usando

Servidor web local de IIS en la configuración del proyecto web

y cambio a Usar Visual Studio Development Server , y esto funciona.


Encontré el problema:

Esta aplicación MVC era parte de una solución más grande, en la que en un momento dado había establecido otro proyecto para construir para un entorno x86 (estoy ejecutando x64). Cuando lo hice, al parecer todos los demás proyectos, incluso los que se agregaron más tarde, se configuraron para no construir en Ctrl+Shift+B , y supongo que es por eso que el depurador no llegó a mi punto de interrupción.

Solución:

Vaya a las propiedades de compilación de la solución (haga clic con el botón derecho en Solución, seleccione propiedades y seleccione Crear en el menú de la izquierda) y marque la casilla Generar al lado del nombre del proyecto en la lista.


Encontré la siguiente respuesta en forums.asp.net :

¿Estás usando IIS7 como 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 "jugar", VS simplemente activa el proceso, luego se une a él, pero 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.


Golpeé con el mismo problema hoy y estaba usando Local IIS.

Creo que esto surge porque 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.


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 quiebre en RegisterRoutes .

proyecto -> propiedad -> web

marque "Código nativo".