Ich habe derzeit die folgenden Routinen in meiner Global.asax.cs
Datei:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Arrangement", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
// Debugs the routes with Phil Haacks routing debugger (link below)
RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
}
Routing-Debugger ...
Wenn ich drücke F5
, wird die Anwendung gestartet und wenn ich keine Ansicht Index.aspx
im ~/Views/Home/
Ordner habe, wird die Fehlermeldung "Ansicht fehlt" angezeigt, obwohl ich die Standardroute neu definiert und die entfernt habe HomeController
. Ich würde erwarten, den Routing-Debugger zu bekommen, und wenn nicht, zumindest eine Anfrage für ~/Views/Arrangement/Index.aspx
.
Ein Haltepunkt RegisterRoutes(Routetable.Routes);
wird beim Debuggen nie erreicht.
Ich habe versucht, VS zu erstellen, neu zu erstellen, neu zu starten, zu reinigen, erneut zu erstellen usw., aber nichts scheint zu funktionieren. Warum führt die Anwendung nicht die aktuelle Version des Codes aus?
quelle
Antworten:
Ich habe die folgende Antwort auf forums.asp.net gefunden :
Das war es, was in meinem Fall geschah.
quelle
<%@ Application Codebehind="Global.asax.cs" Inherits="MyApplication" Language="C#" %>
. Es kann im Projektmappen- Explorer über die Kontextmenüoption Markup anzeigen für das Element Global.asax geöffnet werden. Das Hinzufügen eines nachgestellten Speicherplatzes und das Speichern der Datei reichen aus, um die Anwendung neu zu starten.Fügen Sie ein
System.Diagnostics.Debugger.Break();
zu hinzuApplication_Start()
.Dies erzwingt einen Haltepunkt.
Diese Zeile sollte auskommentiert werden, um zu vermeiden, dass der Haltepunkt passiert, und
#ifdef debug
um sicherzugehen, dass die Produktion nie erreicht wird.quelle
#ifdef debug
können Sie verhindern, dass es in der Produktionsversion kompiliert wird. Und Sie können es vorübergehend verwenden, während Sie es debuggen und schließlich löschen müssen. Bitte lassen Sie mich wissen, welche die besten Praktiken vonDebugger.Launch()
und sindDebugger.Break()
. Diese Dienstprogrammmethoden sind äußerst hilfreich, um das Debuggen von Har-to-Debug-Elementen wie VS-Add-Ins, Windows-Diensten usw. zu erleichtern, ohne den Prozess bei jedem Lauf manuell anhängen zu müssen. Manche Menschen bevorzugen es, puristisch zu sein. Ich bin lieber praktisch.Ich glaube, Sie müssen den lokalen Debugging-Server herunterfahren / stoppen, damit das
Application_Start()
Ereignis erneut ausgelöst wird. Sie sollten in der Taskleiste mit der rechten Maustaste darauf klicken und "Stop" wählen können.quelle
Das Problem ist, dass
Application_Start()
zuerst Auslöser und dann der Debugger angehängt werden.Das Ziel ist es also, etwas zu tun, das
Application_Start()
erneut ausgelöst wird, während es noch läuft. Führen Sie zum Debuggen den Debugger einfach wie gewohnt aus, bearbeiten Sie ihn dann (z. B. fügen Sie eine neue Zeile hinzu) und speichern Sie die Datei web.config.quelle
Ich habe das Problem gefunden:
Diese MVC-Anwendung war Teil einer größeren Lösung, bei der ich zu einem bestimmten Zeitpunkt ein anderes Projekt für eine x86-Umgebung festgelegt hatte (ich verwende x64). Als ich das tat, waren anscheinend alle anderen Projekte - auch die später hinzugefügten - so eingestellt, dass sie nicht darauf aufbauen
Ctrl+Shift+B
, und ich nehme an, dass der Debugger deshalb meinen Haltepunkt nicht erreicht hat.Lösung:
Gehen Sie zu den Eigenschaften der Lösungserstellung (klicken Sie mit der rechten Maustaste auf Lösung, wählen Sie Eigenschaften aus und wählen Sie im Menü links die Option Erstellen aus), und aktivieren Sie das Kontrollkästchen Erstellen neben dem Projektnamen in der Liste.
quelle
Ich hatte heute das gleiche Problem und verwendete Local IIS.
Ich glaube, das liegt daran, wie die Seite geladen wird. Sie müssen lediglich einen Haltepunkt in Application_Start einfügen. Führen Sie die Anwendung aus (in meinem Fall zum Anmeldebildschirm) und gehen Sie dann zu web.config. Bearbeiten Sie es - indem Sie einige Leerzeichen hinzufügen. und dann in Browser aktualisieren. Dadurch wird der Haltepunkt bei Application_Start erreicht.
quelle
application_start
Ereignis vom Debugger getroffen.In meinem Fall habe ich verwendet
Lokaler IIS-Webserver in den Webprojekteinstellungen
und ich wechsle zu Visual Studio Development Server verwenden , und das funktioniert.
quelle
Die folgende Technik hat für mich funktioniert: Eine
einfache Problemumgehung besteht darin, global.asax zu berühren, nachdem der Debugger angehängt wurde, um ein Anwendungsrecycling zu erzwingen. Bei der nächsten Anforderung wird dann der Haltepunkt erreicht, den Sie für Application_Start festgelegt haben.
Ich habe dies hier gefunden:
http://connect.microsoft.com/VisualStudio/feedback/details/634919/cannot-debug-application-start-event-in-global-asax
quelle
In meinem Fall lag das Problem zwischen Stuhl und Tastatur. Nach dem Umbenennen der mvc-Projektassembly habe ich vergessen, Global.asax zu aktualisieren, um auf die richtige Klasse zu verweisen. Überprüfen Sie also die "Inherits" in Global.asax (klicken Sie im Visual Studio mit der rechten Maustaste auf Global.asax -> View Markup).
<%@ Application Codebehind="Global.asax.cs" Inherits="Monster.MgsMvc.Web.MvcApplication" Language="C#" %>
ob es wirklich mit Ihrer Global.asax.cs-Klassen- / Namespace-Deklaration übereinstimmt
quelle
Vielleicht hilft meine Lösung jemandem:
RegisterRoutes
Code (Beispiel - Hinzufügen \ Entfernenint i = 1;
).RegisterRoutes
.quelle
Ich hatte gerade dieses Problem und wechselte in den Projekteigenschaften -> Web von lokalem IIS zu IIS Express, um es zu klären
quelle
Projekt -> Eigenschaft -> Web
Überprüfen Sie "Native Code".
quelle