2012-09-25 17 views
16

Mam aplikację ASP.Net, która wykonuje niektóre inicjowanie bazy danych podczas Application_Start w Global.asax. Używam IIS Express do debugowania aplikacji.Czy program Visual Studio może ponownie uruchomić program IIS Express w nowej sesji debugowania?

Uważam, że jeśli przestanę debugować, wyczyść bazę danych i uruchom ponownie, kod Application_Start nie zostanie wywołany, a moja baza danych nie zostanie poprawnie zainicjowana, więc moja aplikacja nie działa. Dzieje się tak, ponieważ instancja IIS Express nadal działa po zatrzymaniu debugowania. Zamiast ponownego uruchamiania, Visual Studio wydaje się dołączać do istniejącego procesu.

Czy istnieje sposób, aby zmienić to zachowanie takie, że rozpoczęcie nowej sesji debugowania zawsze restartuje proces aplikacji w IIS Express (lub resetuje puli aplikacji w regularnym IIS)?

Ewentualnie, czy jest jakiś sposób, aby wymusić IIS Express zamknięty po zakończeniu sesji debugowania?

znalazłem, że jeśli mogę sprawdzić „Włącz Edytuj i Kontynuuj” w oknie dialogowym Web w ustawieniach projektu, że ma efekt uboczny zatrzymanie IIS Express, podczas debugowania końce. Ale nie jestem pewien, czy chcę wprowadzić efekty uboczne edycji i kontynuowania tylko w celu zatrzymania IIS Express. Na pewno jest lepszy sposób?

Nie wiem, czy to ważne, ale to VS2012.

Odpowiedz

19

Niestety nie jest to osiągalne poprzez konfigurację. Mogę zaproponować ci inną sztuczkę, ale to Ty decydujesz, czy jest lepsza od twojej, czy nie :)

Możesz utworzyć zdarzenie post-build, które zmienia znacznik czasu pliku web.config. Użyłem narzędzia touch.exe z http://www.stevemiller.net/apps/. Musisz także ustawić opcję "Uruchom zdarzenie post-build" na Zawsze. Więc konfiguracja „Build Events” może wyglądać następująco:

enter image description here

Po ustawieniu tej opcji w dowolnym momencie uruchomić debugger, web.config timestamp jest uzyskiwanie aktualizowane co powoduje restart aplikacji (aplikacja AppDomain reload) na pierwsze żądanie - ale w tym momencie jesteś już podłączony do tego procesu, aby zadziałały twoje punkty przerwania zdarzeń Application_.

+0

Działa pięknie. Dzięki! –

+0

+1, sztuczka Lifesaver! – smirkingman

6

Można użyć PowerShell jedną wykładzinę w celu uniknięcia opierając się na zewnętrznej aplikacji:

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

pierwotnej inspiracji pochodzi z here ...

+0

można po prostu użyć [Makro] (https://msdn.microsoft.com/en-us/library/42x5kfw4.aspx?f=255&MSPPError=-2147217396) '$ (ProjectDir)' wtedy nawet nie trzeba ręcznie ustaw wartość dla '' – gregmac

+0

Oczywiście, jeśli to pasuje do twoich potrzeb. Ale w moim przypadku musiałem zrestartować zewnętrzną aplikację, więc jest bardziej jak "% ENV_VARIABLE% \ Web.config" – dstj

Powiązane problemy