Подтвердить что ты не робот

Может ли Visual Studio перезапустить IIS Express на новом сеансе отладки?

У меня есть приложение ASP.Net, которое выполняет некоторую инициализацию базы данных во время Application_Start в Global.asax. Я использую IIS Express для отладки приложения.

Я нахожу, что если я остановлю отладку, очистку базы данных и перезапустите снова, код Application_Start не будет вызван, и моя база данных не будет инициализирована должным образом, поэтому мое приложение завершится с ошибкой. Это связано с тем, что экземпляр IIS Express по-прежнему работает после завершения отладки. Вместо того, чтобы перезапускать его, Visual Studio, похоже, присоединяется к существующему процессу.

Есть ли способ изменить это поведение, так что запуск нового сеанса отладки всегда перезапускает процесс приложения в IIS Express (или сбрасывает пул приложений в обычном IIS)?

В качестве альтернативы, есть ли способ заставить IIS Express завершить работу после завершения сеанса отладки?

Я обнаружил, что если я проверю "Включить редактирование и продолжение" в диалоговом окне "Веб" в настройках проекта, это будет иметь побочный эффект остановки IIS Express при завершении отладки. Но я не уверен, что хочу представить побочные эффекты Edit и Continue только для остановки IIS Express. Наверняка есть лучший способ?

Не уверен, что это важно, но это VS2012.

4b9b3361

Ответ 1

К сожалению, это невозможно достичь с помощью конфигурации. Я могу предложить вам еще один трюк, но вам решать, лучше ли это или нет:)

Вы можете создать событие post-build, которое изменит временную метку файла web.config. Я использовал инструмент touch.exe из http://www.stevemiller.net/apps/. Вам также необходимо установить для параметра "Запустить событие после сборки" значение "Всегда". Таким образом, ваша конфигурация "Build Events" может выглядеть следующим образом:

enter image description here

С помощью этой опции при каждом запуске отладчика обновляется временная метка web.config, вызывающая перезапуск приложения (приложение appdomain reload) по первому запросу, но на этом этапе вы уже привязаны к этому процессу, чтобы ваше событие Application_ контрольные точки должны работать.

Ответ 2

Вы можете использовать однострочный динамик Powershell, чтобы не полагаться на внешнее приложение:

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

Оригинальное вдохновение происходит от здесь...