Может ли 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.
Ответы
Ответ 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)
Оригинальное вдохновение происходит от здесь...