23

Mam punkt przerwania na pierwszej linii Application_Start(), ale Visual Studio przyzwyczajenie rozbić na nim.nie może złamać w global.asax/Application_Start

Visual Studio przywiązują się do procesu roboczego IIS:

Auto-dołączyć do procesu '[2092] W3wp.exe' na maszynie 'SRD00510' udało.

Moja przerwa w kontrolerze domowym działa.

aktualizacja

Próbowałem:

  • iisreset
  • wznowiona visual studio
  • uruchomiony ponownie.
  • Próbowałem przeinstalować aspnet (aspnet_regiis -i)
+0

jaka wersja IIS? – jrummell

+0

IIS 7.5 w WinSvr 2008 R2 – jgauffin

+0

Spróbuj kliknąć prawym przyciskiem myszy na proj. debugowanie> przejdź do nowej instancji. W ten sposób można zobaczyć, co się dzieje od samego początku. – jrb

Odpowiedz

47

Czytając twoje pytanie, zakładam, że używasz IIS do debugowania, a nie Visual Studio Development Server.

W takim przypadku uruchomienie aplikacji debugującej jest trudne, ponieważ jest wywoływane tylko raz, gdy pula aplikacji jest uruchomiona lub poddana recyklingowi. Kiedy Visual Studio dołącza do procesu, Application_Start już działa.

Podejście polega na przywróceniu puli aplikacji bez zabicia procesu, do którego jesteś przyłączony.

Wykonaj następujące czynności:

  1. W Visual Studio (musi być uruchomiony jako administrator) ustawić punkt przerwania w Global.asax.cs i rozpocząć debugowanie jak zwykle (F5). Strona zostanie otwarta w przeglądarce internetowej, ale punkt przerwania nie zostanie trafiony.
  2. Teraz sztuczka: Za pomocą edytora tekstu otwórz plik web.config, skąd jest obsługiwany przez IIS, zmień go (np. Wpisz gdzieś pustą linię) i zapisz. W przeciwieństwie do recyklingu puli aplikacji w IIS, ta pozwala na recykling puli aplikacji (i tym samym przepuszczanie przez Application_Start w global.asax.cs przy następnym wywołaniu strony internetowej ) bez zabijania procesu, do którego jesteś przyłączony.
  3. W swojej przeglądarce internetowej ponownie załaduj stronę. Punkt przerwania powinien być teraz trafiony!

To działa dla mnie (IIS 7.5, VS2015).

+1

To nadal działa z drobną modyfikacją między krokami 2 i 3. Zmiana web.config zmusza do zatrzymania debugowania, ale możesz ponownie dołączyć do procesu i kontynuować, tak jak powiedziałeś. – Danation

+0

Gdzie się tego nauczysz? –

+0

@Danation: Masz rację. Nie powinieneś używać instancji programu Visual Studio, z którą debugujesz. Najważniejsze jest to, że edytujesz plik web.config w miejscu na dysku, skąd jest obsługiwany przez IIS. Może to być inna lokalizacja niż ta, w której znajduje się projekt Visual Studio. Zajrzyj do IIS, gdzie katalog główny witryny znajduje się na dysku. Odpowiednio zmieniłem swoją odpowiedź. – Jochen

6

Application_Start() działa tylko raz, podczas uruchamiania aplikacji. Kilka rzeczy, które ponownie uruchomić aplikację to:

  • web.config zmienia
  • recykling procesu roboczego - można to zrobić w Menedżerze IIS lub uruchamiając iisreset w wierszu poleceń.
+0

Zabiłem w3wp z menedżerem zadań i próbowałem zmienić web.config. – jgauffin

+0

To dziwne ... jeśli jesteś już podłączony, zmiana pliku web.config powinna to zrobić. Czy jesteś pewien, że kod w punkcie przerwania jest wykonywany? Czy możesz przenieść go na początek 'Application_Start()'? – jrummell

+0

Tak, jestem pewien. – jgauffin

14

Umieść tę linię w swoim Application_Start().

Debugger.Break(); 

Zostanie wyświetlone okno dialogowe, w którym można wybrać debugger. Może być konieczne ponowne uruchomienie puli aplikacji.

+1

To daje mi nową instancję studia wizualnego. – jgauffin

+0

Zazwyczaj otrzymuje się formularz "wyboru", aby wybrać nową VS lub aktualnie działającą VS. Nie widzisz tego? – spender

+0

Tak, ale mogę wybrać tylko nową instancję studia wizualnego. – jgauffin

0

Zakładam, że ładujesz aplikację, klikając przycisk "debugowanie" w programie Visual Studio? Właśnie to robię (w VS 2012) i widzę podobne problemy. Naciśnięcie tego przycisku po raz pierwszy uruchamia aplikację i poprawnie trafia w punkt przerwania. Ale wygląda na to, że po zakończeniu debugowania sama aplikacja kontynuuje działanie. Zatem przyszłe próby debugowania po prostu dołączą do istniejącego procesu.
Obok przycisku "zatrzymaj debugowanie" znajduje się przycisk "restart", więc zakładam, że kliknięcie to przynajmniej zmieniłoby sytuację. Aplikacja do debugowania nie pojawia się w Menedżerze usług IIS, więc nie mogę jej tam zatrzymać. Podobnie iisreset też go nie łapie.

Jedyne co mam zorientowali się tak daleko, aby zmienić linię kodu, tym samym zmuszając visual studio wyzwolić kompilacji, a następnie zabija istniejący proc i zaczyna się od nowa. Trochę irytujące, jeśli chcę przejść kilka razy.

nie uważam tego odpowiednia „odpowiedź”, ale może to być pomocne obejście dla ciebie aż ktoś ma przyjść z prawdziwą odpowiedź.

1

Moje rozwiązanie jest, aby przełączyć się używając do czynienia z klasą aplikacji problemy (Global.asax) w 'Studio rozwoju serwera Plastyków. Po zakończeniu przełączam się z powrotem do IIS.

0

mam ten problem przed robiąc to:

  1. Run czyste na moim roztworze (prawym przyciskiem myszy węzeł, a następnie kliknij czysty roztwór)
  2. Close rozwiązanie
  3. Plik -> Zakończ w wizualnym studio
  4. Jeśli masz wiele instancji Visual Studio działa, a następnie wyjść ze wszystkich instancji. Upewnić „devenv.exe” nie jest wymieniony w procesach w menedżerze zadań
  5. Usuń plik opcji użytkownika (.suo), zazwyczaj w tym samym katalogu, co roztworze (.sln) plik
  6. Recycle IIS proces roboczy lub jeśli za pomocą serwera rozwoju, zabij ten proces.

Teraz otwórz rozwiązanie i daj mu szansę. (Trzymajcie kciuki :))

0

Kiedykolwiek uruchomić aplikację po raz pierwszy, albo powiedzieć, uruchomić aplikację, istnieje ASP.Net Development Server - Port [numer portu], która zaczyna,

Application_Start() uruchamia się raz w trakcie aplikacji.

Jeśli chcesz, aby punkt krytyczny został osiągnięty, musisz zatrzymać port serwera ASP.Net Development Server i ponownie uruchomić aplikację.

0

jeśli [2092] w3wp.exe jest usługą, która dokonane, spróbuj tego: Zatrzymaj usługę -> odbudować projekt serwisowy -> zacząć przebudowany serwis -> spróbować debugowania