2012-09-25 68 views
16

Tengo una aplicación ASP.Net que realiza una inicialización de base de datos durante Application_Start en Global.asax. Estoy usando IIS Express para depurar la aplicación.¿Puede Visual Studio reiniciar IIS Express en una nueva sesión de depuración?

Me parece que si dejo de depurar, borro la base de datos y reinicio de nuevo, el código Application_Start no se llama y mi base de datos no se inicializa correctamente, por lo que mi aplicación falla. Esto se debe a que la instancia de IIS Express aún se está ejecutando después de que se detiene la depuración. En lugar de reiniciarlo, Visual Studio parece estar conectado al proceso existente.

¿Hay alguna manera de cambiar este comportamiento de manera que iniciar una nueva sesión de depuración siempre reinicie el proceso de la aplicación en IIS Express (o restablezca el grupo de aplicaciones en IIS regular)?

Por otra parte, hay una manera de forzar IIS Express para apagar al terminar la sesión de depuración?

Encontré que si marqué "Habilitar edición y continuar" desde el cuadro de diálogo Web en la configuración del proyecto, eso tiene el efecto secundario de detener IIS Express cuando finaliza la depuración. Pero no estoy seguro de querer presentar los efectos secundarios de Editar y Continuar solo con el propósito de detener IIS Express. Seguramente hay una mejor manera?

No estoy seguro si es importante, pero esto es VS2012.

Respuesta

19

Desafortunadamente no se puede lograr a través de la configuración. Puedo proponerte otro truco, pero depende de ti decidir si es mejor que el tuyo o no :)

Puedes crear un evento de post-construcción que cambie la marca de tiempo de un archivo web.config. Utilicé una herramienta touch.exe desde http://www.stevemiller.net/apps/. También debe establecer "Ejecutar el evento posterior a la construcción" en Siempre. Por lo que su configuración de "Eventos de generación" puede ser similar al siguiente:

enter image description here

Con esta opción en cualquier momento de iniciar el depurador, fecha y hora web.config se está haciendo actualiza (recarga aplicación dominio de aplicación) reinicio de aplicaciones en la primera solicitud - pero en este momento ya está conectado a este proceso por lo que sus puntos de interrupción de evento Application_ deberían funcionar.

+0

Esto funciona muy bien. ¡Gracias! –

+0

+1, truco salvavidas! – smirkingman

6

Se puede utilizar una sola línea Powershell para evitar depender de una aplicación externa:

powershell -NoProfile -Command (Get-Item "<path>\Web.config").lastwritetime=(Get-Date)

inspiración original proviene de here ...

+0

Usted sólo puede usar el [macro] (https://msdn.microsoft.com/en-us/library/42x5kfw4.aspx?f=255&MSPPError=-2147217396) '$ (ProjectDir)' a continuación, ni siquiera tiene que establecer manualmente un valor para '' – gregmac

+0

Claro, si eso se ajusta a sus necesidades. Pero en mi caso, necesitaba reiniciar una aplicación externa por lo que es más como '% ENV_VARIABLE% \ Web.config' – dstj

Cuestiones relacionadas