2009-12-25 21 views

Respuesta

5

Tal vez debería probar:

  • detención del servidor de desarrollo en la barra de tareas
  • cambiar la configuración de una versión a depurar
+5

Es extraño que esto haya sido marcado como la respuesta pero tiene una calificación -2 ... –

+0

Tiene una calificación negativa porque está mal. Es correcto decir que necesita estar en depuración (o si no tiene los archivos pdb) y necesita capturar el servidor cuando se inicia (porque es cuando se ejecuta ese código) pero no podrá para unir al proceso. Necesita un proceso en ejecución para conectar el depurador, el código global.asax se ejecuta en los primeros milisegundos de este proceso, por lo que es literalmente imposible (sin utilizar la [respuesta correcta a continuación] (https://stackoverflow.com/a/) 4809464/542251)) para adjuntar al proceso mientras ejecuta este código – Liam

5

Sí, es normal.

Application_Start() es procesado por IIS.

Pero todos los demás métodos, por ejemplo Session_Start, y todos los demás, excepto Application_Start() se pueden depurar normalmente.

9

Application_Start() se invoca una vez por AppDomain. Si no está agotando su punto de ruptura, que significa el dominio de aplicación ya creada, también lo hacen los siguientes:

  • En la barra de inicio rápido, hay un icono para el servidor web VS (su el que dice "Local Host Some Port"). Haga clic derecho y elija "Parar" o "Cerrar". Esto debería matar el AppDomain.
    • Si está utilizando IIS, debe reiniciar su sitio manualmente.
    • Alternativamente, la modificación de la configuración web o del archivo Global.asax suele ser suficiente para reiniciar AppDomain.
  • Reinicie su depuración, debe llegar a sus puntos de interrupción ahora.
7

Compruebe que su aplicación web está en modo de depuración (<compilation debug="true"> en web.config).

Si está utilizando el desarrollador IIS iniciado por VS, simplemente reinícielo o reconstruya la aplicación.

Si estás en IIS normal, usted tiene dos opciones:

  1. para el sitio web está configurado para trabajar con la carpeta de desarrollo (donde Vs es desplegado proyecto web) sólo hay que reiniciar conjunto del grupo de aplicaciones para ese sitio web y comience a depurar antes de que la primera solicitud llegue al servidor (siempre puede reiniciar el grupo de aplicaciones durante la depuración).
  2. Para sitios web que funcionan en otra carpeta o incluso en un servidor remoto, debe adjuntarlos al proceso. Para hacer esto, necesita un depurador remoto instalado en la máquina remota o el suyo (depende de la ubicación del servidor web) y use el menú Debug - Attach to process, ingrese el nombre de la computadora y luego seleccione un proceso para depurar. Por lo general, es un w3wp.exe que funciona en el tipo de modo administrado.
+0

gracias por su respuesta. Yo uso IIS a través de VS. – mahdiahmadirad

82

Una manera simple de romper en Application_Start() es utilizar la clase System.Diagnostics.Debugger. Puede forzar que la aplicación se rompa insertando System.Diagnostics.Debugger.Break() donde desea que se rompa el depurador.

void Application_Start(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debugger.Break(); 

    // ... 
} 
2

Borre el global.asax y añada uno nuevo. En mi solución, ha habido un global.asax y un global.asax.cs.

Todos los métodos (Session_Start, Application_Start, ...) han estado en los archivos bot, pero solo los que están en el global.asax han sido considerados. Por lo tanto, los puntos de corte y el código en el cs no hacen nada.
Solo después de volver a crear el archivo, el global.asax.cs tenía los métodos adecuados y se ejecutaban.

+0

Seguí las instrucciones aquí: http://rossnelson.blogspot.ca/2005/11/fixing-globalasax-in-aspnet-20.html. Básicamente, elimine el archivo global.asax y agregue una clase de aplicación global que vuelva a crear el asax con un código detrás del archivo, al cual puedo acceder. Me estoy ejecutando en IIS y funciona bien. – cbeuker

53
  1. Adjunte el depurador al proceso IIS.
  2. Abra el archivo global.asax y coloque un punto de interrupción.
  3. Agregue un espacio al archivo web.config y guarde el archivo (esto hace que la aplicación web actual se restablezca);
  4. Actualizar/ir a una página web en el sitio.
  5. mire con asombro cuando el depurador se detiene en su punto de interrupción. :)
+1

Esto también se conoce como 'Touching the web.config' y se puede usar para varios escenarios cuando necesite actualizar su sitio sin tocar IIS. No puedo creer que no se me haya ocurrido. Gracias. – HockeyJ

+0

Ojalá fuera así de simple. ¿Pero para mi? "la computadora dice que no" – Justin

3

Otra alternativa a la System.Diagnostics.Debugger.Break(); aceptado habría

void Application_Start(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debugger.Launch(); 
    //... 
} 

que no debe romper el código y debe iniciar el depurador, incluso si el servicio se inició con diferentes derechos.

+0

esto es bueno, lo intenté y funcionó para mí también ... gracias –

0

No espere que se llame inmediatamente a la función Application_Start() presionando f5. Application_Start() se invoca solo en el momento de la primera solicitud de la aplicación. Extraño pero cierto.

0

En caso de que todas las respuestas sin funcionar, prueba:

<compilation debug="true" ... /> 

en web.config. ;)

Cuestiones relacionadas