23

Tengo un punto de quiebre en la primera línea de Application_Start(), pero Visual Studio no se romperá en él.No se puede romper en global.asax/Application_Start

Visual Studio han adherido al proceso de trabajo de IIS:

Auto-conectar con el proceso '[2092] w3wp.exe' en la máquina 'SRD00510' tuvo éxito.

Mi punto de interrupción en el controlador doméstico funciona.

actualización

que he probado:

  • iisreset
  • reiniciar Visual Studio
  • Rebooted.
  • Probamos para reinstalar Red PEA (aspnet_regiis -i)
+0

¿Qué versión de IIS? – jrummell

+0

IIS 7.5 en WinSvr 2008 R2 – jgauffin

+0

Pruebe con el botón derecho del ratón en proy. debug> ingresa a una nueva instancia. De esta forma, puedes ver lo que está sucediendo desde el principio ... – jrb

Respuesta

47

Al leer su pregunta, supongo que está utilizando IIS para la depuración, no Visual Studio Development Server.

En este caso, el inicio de la aplicación de depuración es complicado, ya que solo se invoca una vez cuando se inicia o se recicla el grupo de aplicaciones. Cuando Visual Studio se une al proceso, Application_Start ya se ha estado ejecutando.

El truco consiste en hacer que el grupo de aplicaciones se recicle sin matar el proceso al que está conectado.

Haz lo siguiente:

  1. En Visual Studio (se debe ejecutar como administrador) Fija tu punto de interrupción en global.asax.cs y puede iniciar la depuración como de costumbre (F5). La página abre en su navegador web, pero no se golpea el punto de interrupción.
  2. Ahora el truco: con un editor de texto, abra web.config desde donde está atendido por IIS, cámbielo (por ejemplo, introduzca una línea en blanco en alguna parte) y guárdelo. A diferencia de reciclar el grupo de aplicaciones en IIS, este permite que el grupo de aplicaciones se recicle (y ejecute Application_Start en global.asax.cs la próxima vez que se llame al sitio web ) sin matar el proceso al que está conectado.
  3. En su navegador web, vuelva a cargar la página. ¡El punto de quiebre debería ser golpeado ahora!

Eso funciona para mí (IIS 7.5, VS2015).

+1

Esto todavía funciona con una pequeña modificación entre los pasos 2 y 3. Cambiar web.config lo obliga a detener la depuración, pero puede volver a conectarlo al proceso y continuar como lo indicó. – Danation

+0

¿Dónde aprendes estas cosas? –

+0

@Danation: tienes razón. No deberías usar la instancia de Visual Studio con la que estás depurando actualmente. El punto principal es que edite web.config en el lugar del disco desde donde IIS lo sirve. Esa puede ser una ubicación diferente a la que reside su proyecto de Visual Studio. Mire en IIS donde está ubicado el directorio raíz del sitio en el disco. Cambié mi respuesta en consecuencia. – Jochen

6

Application_Start() sólo se ejecuta una vez, cuando se inicia la aplicación. Algunas cosas que reiniciar la aplicación son:

  • web.config cambia
  • reciclar el proceso de trabajo - se puede hacer esto en el Administrador de IIS o ejecutando iisreset en la línea de comandos.
+0

He eliminado w3wp con el administrador de tareas y he intentado cambiar web.config. – jgauffin

+0

Eso es extraño ... si ya estás conectado, cambiar el web.config debería hacerlo. ¿Estás seguro de que se está ejecutando el código en el punto de ruptura? ¿Puedes moverlo al inicio de 'Application_Start()'? – jrummell

+0

Sí, estoy seguro. – jgauffin

14

Coloque esta línea en su Application_Start().

Debugger.Break(); 

Esto le presentará un cuadro de diálogo que le permitirá seleccionar un depurador. Es posible que deba reiniciar el grupo de aplicaciones.

+1

Eso me da una nueva instancia de Visual Studio. – jgauffin

+0

Por lo general, se obtiene un formulario de "selector" para seleccionar un nuevo SV o VS actualmente en ejecución. Usted no ve eso? – spender

+0

Sí, pero solo puedo seleccionar una nueva instancia de Visual Studio. – jgauffin

0

Supongo que está cargando la aplicación haciendo clic en el botón "depurar" en Visual Studio? Eso es lo que estoy haciendo (en VS 2012) y veo problemas similares. Al presionar ese botón la primera vez, se inicia la aplicación y se golpea correctamente el punto de interrupción. Pero parece que después de dejar de depurar la aplicación en sí continúa. Por lo tanto, los intentos futuros de depurar solo se conectan al proceso existente.
Hay un botón de "reinicio" al lado del botón "Detener la depuración", así que supongo que hacer clic en eso al menos podría cambiar las cosas. La aplicación de depuración no aparece en el administrador de IIS, por lo que no puedo detenerlo allí. Del mismo modo, iisreset tampoco lo capta.

Lo único que he descubierto hasta ahora es cambiar una línea de código, lo que obliga a Visual Studio a desencadenar una compilación y luego mata el proceso existente y comienza de nuevo. Es algo molesto si solo quiero pasar por allí varias veces.

No considero que esta sea una "respuesta" adecuada, pero podría ser una solución útil para usted hasta que alguien entre con una respuesta real.

1

Mi solución es cambiar al uso del 'Visual Studio Development Server' para tratar los problemas de clase de aplicación (Global.asax). Cuando termine, vuelvo a IIS.

0

Tengo alrededor de este problema antes de hacer esto:

  1. Ejecutar una limpieza en mi solución (Haga clic derecho en el nodo y haga clic en solución limpia)
  2. Cerrar solución
  3. Archivo -> Salir en el estudio visual
  4. Si tiene varias instancias de Visual Studio ejecutándose, salga de todas las instancias. Asegúrese de que "devenv.exe" no aparezca en los procesos en el administrador de tareas
  5. Elimine el archivo de opciones del usuario (.suo), generalmente en el mismo directorio que su archivo de solución (.sln)
  6. Reciclaje del proceso de trabajo de IIS o utilizando el servidor de desarrollo, elimine ese proceso

Ahora abra la solución y pruébela. (Mantenga los dedos cruzados :))

0

Cada vez que se ejecuta una aplicación por primera vez, o decir iniciar una aplicación, hay un servidor de desarrollo ASP.Net - Puerto [número de puerto] que se inicia,

Application_Start() se ejecuta una vez en el transcurso de una aplicación.

Si desea alcanzar el punto de interrupción, debe detener el puerto del servidor de desarrollo ASP.Net y ejecutar su aplicación nuevamente.

0

si [2092] w3wp.exe es un servicio que usted ha hecho, intente esto: servicio de la parada -> reconstruir proyecto de servicio -> iniciar el servicio reconstruida -> tratar de depurar

Cuestiones relacionadas