Mam aplikację ASP.NET MVC (beta), nad którą pracuję, i mam problem z ustaleniem, czy robię coś źle, lub czy moja Application_Start
metoda w Global.asax.cs w rzeczywistości nie uruchamia się, gdy próbuję do debugowania aplikacji.
Umieściłem punkt przerwania w wierszu mojej Application_Start
metody i spodziewam się, że gdy próbuję debugować aplikację, punkt przerwania powinien zostać trafiony ... ale nigdy tak się nie dzieje. Nie po zresetowaniu usług IIS, ani po ponownym uruchomieniu, nigdy. Czy coś mi brakuje? Dlaczego ta metoda nigdy nie jest wywoływana?
c#
asp.net-mvc
Bob Yexley
źródło
źródło
global.asax
prostu brakowało pliku. więc to też warto sprawdzić :-)Odpowiedzi:
Jeśli jest to w usługach IIS, aplikację można uruchomić przed dołączeniem debugera. Jeśli tak, nie jestem pewien, czy możesz spać wystarczająco długo, aby się przywiązać.
W programie Visual Studio można dołączyć debuger do procesu. W tym celu kliknij Debuguj >> Dołącz do procesu. Podłącz do przeglądarki, a następnie naciśnij swoją aplikację. Aby być bezpiecznym, uruchom ponownie IIS i wejdź na stronę. Nie jestem w 100% przekonany, że to rozwiąże problem, ale zrobi to znacznie lepiej niż odpalenie snu wątku w App_Start.
Inną opcją jest tymczasowe hostowanie na wbudowanym serwerze internetowym do czasu zakończenia debugowania uruchamiania aplikacji.
źródło
Uwaga: przyjemną i łatwą alternatywą dla korzystania z wbudowanego „Visual Studio Development Server” lub IIS Express (np. Ponieważ tworzysz w oparciu o IIS i masz określone ustawienia potrzebne do prawidłowego funkcjonowania aplikacji) jest po prostu kontynuowanie działania w usługach IIS (I użyj niestandardowego serwera sieci Web + wpis pliku hostów + powiązanie usług IIS z tą samą domeną)
Twój punkt przerwania powinien zostać dobrze trafiony i możesz kontynuować debugowanie w swoim naturalnym środowisku IIS . Świetny !
źródło
Poniższe wskazówki pomagają w każdym przypadku (bez względu na to, czy używasz IIS, Cassini czy cokolwiek innego):
Dlaczego to działa? Po zmianie pliku web.config serwer sieciowy (IIS, Cassini itp.) Wykonuje recykling, ale w tym przypadku (z dowolnego powodu) proces pozostaje taki sam, więc pozostajesz z nim połączony za pomocą debugera (Visual Studio ).
źródło
Ja też mam problemy z punktami przerwania w application_start z usługami IIS hostowanej aplikacji. Dobrym rozwiązaniem jest użycie Debugger.Break (); w kodzie zamiast punktu przerwania VS
źródło
Mam ten sam problem. W moim rozwiązaniu dokonałem wielu zmian nazwy. Po tym dostałem dwie niedziałające aplikacje internetowe i kilka innych aplikacji internetowych było w porządku. Pojawił się błąd, że mam złe trasy. Kiedy próbowałem ustawić punkt przerwania w
Application_Start
metodzie, a następnie ponownie uruchomić usługi IIS, VS nie przerwał wykonywania. Z działającymi aplikacjami internetowymi działała przerwa. Następnie przypomniałem sobie, że „czyste rozwiązanie” i „przebudowa” nie usuwa zestawów, które pozostały po zmianie nazwy. I to było rozwiązanie! Ręcznie wyczyściłembin
katalogi moich błędnych aplikacji internetowych, a następnie zobaczyłem nowy błąd wGlobal.asax
Inherits=""
atrybucie odwołującym się do starej biblioteki dll. Zmieniłem go na nowy i przerwa zaczęła działać. Załóżmy, że podczas zmiany nazwy Global.asax nie został zaktualizowany,źródło
Mieliśmy ten sam problem w projekcie, który przejęliśmy po zbudowaniu go przez innego dostawcę. Problem polegał na tym, że chociaż było wiele poleceń napisanych przez poprzedniego sprzedawcę w Global.asax.cs, co mogło prowadzić do przekonania, że jest używane, w rzeczywistości zostało całkowicie zignorowane. Global.asax nie dziedziczy po nim i łatwo jest nigdy nie zobaczyć tego pliku, jeśli istnieje plik .cs - musisz kliknąć prawym przyciskiem myszy Global.asax i kliknąć Wyświetl znaczniki, aby go zobaczyć.
Global.asax:
Wymagane zmiany na:
Gdzie ProjectNamespace jest przestrzenią nazw Twojej klasy Global.asax.cs (zwykle jest to nazwa Twojego projektu).
W naszym przypadku plik zawierał kilka wbudowanych kodów, z których część została skopiowana i wklejona z pliku .cs, a część nie. Właśnie zrzuciliśmy kod wbudowany do pliku .cs i stopniowo scaliliśmy z powrotem nasze zmiany.
źródło
Spróbuj zmienić tryb zarządzanego potoku dla puli aplikacji na „Klasyczny” zamiast „Zintegrowany”. To rozwiązało problem. Patrząc teraz na przyczynę ...
(Rekwizyty za tę odpowiedź należą do Floresa (zobacz jego komentarz do jego własnej odpowiedzi), chciałem tylko podać to jako oddzielną odpowiedź, aby zwrócić na nią więcej uwagi)
źródło
Upewnij się, że plik global.asax nie znajduje się w podkatalogu. Musi być umieszczony na poziomie głównym projektu.
źródło
Global.asax.cs
i spodziewałem się, że zadziała. Musisz go utworzyć za pomocąAdd
->New Item
->,Global Application Class
aby został utworzony z odpowiednimGlobal.asax
plikiem konfiguracyjnym formularzy internetowych.Mieliśmy podobny problem, gdzie global.asax.cs był ignorowany.
Okazuje się, że witryna została uaktualniona z prekompilowanej witryny .NET 2 do witryny .NET 4.0. Na serwerze
PrecompiledApp.config
plik nie został usunięty z folderu głównego. Po usunięciu go i ponownym przetworzeniu puli aplikacji IIS i dotknięciu pliku web.config w celu ponownego uruchomienia aplikacji kod w Global.asax.cs zaczął działać poprawnie.źródło
Kiedyś miałem problem, w którym pliki Global.asax i Global.asax.cs nie zostały w rzeczywistości skopiowane do folderu IIS przez skrypty wdrażania ... Więc zadziałało podczas debugowania na serwerze deweloperskim, ale nie w usługach IIS.
źródło
Późny wpis ...
Aby sprawdzić, czy aplikacja IIS została uruchomiona, zanim debugger miał wystarczająco dużo czasu na dołączenie, po prostu dodaj to na górze lub na dole pliku GLOBAL.ASAX
Application_Start
.źródło
Kiedy mówisz „debugowanie”, masz na myśli faktyczne uruchamianie aplikacji z wbudowanego serwera internetowego programu Visual Studio w celu debugowania, czy też masz na myśli dołączenie do procesu w usługach IIS? Jeśli jest to pierwsza, powinieneś nacisnąć Application_Start, ale jeśli to druga, może być trudno być na procesie wystarczająco wcześnie, aby go złapać.
źródło
Zamknij program Visual Studio i usuń foldery
bin
iobj
w projekcie sieci Web (lub wszystkie projekty w rozwiązaniu).Oto polecenia umożliwiające usunięcie tych folderów ze wszystkich projektów:
źródło
Wprowadziłem kilka zmian w oparciu o „Code Analysis on Build” z Visual Studio. Analiza kodu zasugerowała „CA1822 Oznacz członków jako statyczne” dla Application_Start () w Global.asax. Zrobiłem to i skończyłem z tym problemem.
Proponuję pominąć ten komunikat analizy kodu i nie zmieniać sygnatury metod / klas automatycznie tworzonych przez platformę używaną do ładowania aplikacji. Podpis metody Application_Start prawdopodobnie nie był statyczny z jakiegoś powodu.
Wróciłem do tej sygnatury metody i ponownie uruchomiła się Application_Start ():
źródło
Napotkałem ten problem, używając strony statycznej (np. Index.html) jako strony startowej - Application-Start nie jest wywoływany. Odkryłem, że obsługa statycznej strony w rzeczywistości nie uruchamia aplikacji. Żądanie strony .aspx tak.
źródło
Upewnij się, że przestrzenie nazw w Global.asax i Global.asax.cs są takie same. Jeśli są różne, nie zgłosi żadnego błędu, ale nie trafi w punkt przerwania, również dlatego, że w ogóle nie wykonuje application_start.
źródło
Myślę, że zdarzenie startowe aplikacji jest uruchamiane dopiero po wysłaniu pierwszego żądania, czy trafiasz na swoją witrynę (tj. Wysyłasz żądanie)?
źródło
Miałem ten problem w projekcie formularzy internetowych .net 4 vs2010 i wypróbowałem wszystko, o czym mowa na tej stronie. Skończyło się na usunięciu i dodaniu global.asax faktycznie rozwiązało problem.
źródło
Mam ten sam problem, nie mogę złapać Application_Start. Powodem było to, że nie uruchamiał błędu w pliku znaczników. Plik znaczników Global.asax dziedziczył inną klasę ...
źródło
Czy sprawdziłeś ustawienia projektu? Miałem ten problem i miałem URL początkowy prowadzący do innego portu niż port specyficzny dla mojego serwera. Zajęło mi to zbyt dużo czasu, zanim zrozumiałem ...
źródło
Po wypróbowaniu tylu innych odpowiedzi, które miały zastosowanie w mojej sytuacji i nie miałem szczęścia z żadną z nich, przeszedłem do właściwości projektu internetowego (projekt po stronie serwera dla aplikacji Silverlight korzystającej z usług RIA), kliknąłem Karta „Sieć” i zmieniono wybrany serwer z „Lokalne IIS” na „IIS Express”. (Uwaga, używam VS2013.) To rozwiązało problem. Application_Start jest wykonywany w „IIS Express”, ale nie w „Local IIS”. Ciekawy...
źródło
Próbowałem przejść przez kod w RegisterRoutes () wywołany z uruchomienia aplikacji i nie trafiając w mój punkt przerwania. Ustaliłem, że nie wywoływano Application_Start. Musiałem dokonać zmiany, aby dokonać powierzchownej zmiany w App_start / RouteConfig.cs i zapisać ją, zanim zostanie wywołana Application_Start. Wydaje mi się, że te pliki są gdzieś buforowane i nie są wywoływane, chyba że zostanie wprowadzona zmiana.
źródło
Mój ten sam problem został rozwiązany przez dodanie odwołania do
System.Web.Routing
zestawu w projekcieźródło
Jeśli używasz System.Diagnostics.Debugger.Break (); obejście (które moim zdaniem jest dobre do tymczasowego użytku) i „po prostu nie działa” na komputerze z systemem Windows 8. Przyczyną jest błąd w programie Visual Studio „Debugowanie na czas”.
Rozwiązanie jest następujące, aby naprawić klucz dla „Visual Studio Just-In-Time Debugger”
Otwórz regedit i przejdź do HKEY_CLASSES_ROOT \ AppID {E62A7A31-6025-408E-87F6-81AEB0DC9347} dla wartości rejestru „AppIDFlags”, ustaw flagę na 0x8
Więcej informacji tutaj: http://connect.microsoft.com/VisualStudio/feedback/details/770786/just-in-time-debugging-operation-attempted-is-not-supported
źródło
W moim przypadku zabicie wbudowanej instancji ASP.NET Development Server za pośrednictwem paska zadań rozwiązało problem.
źródło
Dziwne i szalone rzeczy ... ale debugowanie na maszynie serwera i inny użytkownik zostawił IIS Express działający w swojej sesji. Musiałem wylogować się z tego użytkownika, aby zabić jego uruchomione procesy IIS Express. Wydaje się, że to rozwiązało problem!
Aktualizacja
Po spędzeniu ponad godziny na pogoni za tym, co powoduje problem ... oto oferta: w pewnym sensie udało mi się wpisać
s
wewnątrz<appSettings>
sekcjiWeb.config
. Visual Studio próbował ostrzec mnie wError List
oknie z ostrzeżeniem . Wyznaję, że rzadko sprawdzam ostrzeżenia ... powinienem zacząć to sprawdzać od teraz. : D Jak tylko usunąłem naruszającys
punkt, punkt przerwania został trafionyApplication_Start
.źródło
Miałem ten problem podczas próby inicjalizacji log4net. Postanowiłem po prostu stworzyć statyczny konstruktor dla Global.asax
źródło
Problem występuje głównie podczas próby przeniesienia pliku Global.asax do innego katalogu rozwiązania. Ponownie przenieś plik Global.asax do domyślnej lokalizacji. Będzie działać zgodnie z oczekiwaniami.
źródło
Żadne z opisanych powyżej rozwiązań nie zadziałało. Jednak ponowna instalacja pakietu
Korzystanie z nuget gui jest (niezbyt przyjemnym) obejściem
źródło