Почему не запускается приложение () событие пожара, когда я отлаживаю мой ASP.NET приложение MVC?
в настоящее время у меня есть следующие процедуры в моем Global.asax.cs
file:
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);
}
когда я нажмите F5
, приложение запускается и если у меня нет представления с именем Index.aspx
на ~/Views/Home/
Папка, я получаю сообщение об ошибке "просмотр отсутствует", хотя я повторно определил маршрут по умолчанию и удалил HomeController
. Я ожидал бы получить отладчик маршрутизации, а если нет, то хотя бы запрос на ~/Views/Arrangement/Index.aspx
.
Точку останова на RegisterRoutes(Routetable.Routes);
никогда не попадает при отладке.
Я пробовал строить, перестраивать, перезапускать VS, очищать, перестраивать снова и т. д., Но ничего не работает. Почему приложение не запускает текущую версию кода?
12 ответов:
Я нашел следующий ответ ВКЛ forums.asp.net:
вы используете IIS7 в качестве сервера или встроенного веб-сервера? Я заметил при использовании IIS7, что если вы запустите отладчик, пусть появится страница, а затем измените глобальный.asax (файл разметки, а не код позади) пока отладчик все еще работает, затем обновите страницу, точки останова в Application_Start будут поражены.
Я думаю, что происходит то, что нажатие "play", VS просто запускает затем присоединяется к нему, но к тому времени, когда он присоединяется к нему, событие запуска уже запущено. Глобальные изменения.asax, вы заставляете приложение перезапускаться, и поскольку отладчик уже подключен, вы можете нажать точку останова. Не отличное решение, но, кажется, работает.
вот что происходило в моем случае.
добавить
System.Diagnostics.Debugger.Break();
доApplication_Start()
.
это вызовет точку останова.эта строка должна быть закомментирована, чтобы избежать точки останова для happern и
#ifdef debug
чтобы убедиться, что никогда не попадает в производство.
Я считаю, что вы должны выключить / остановить локальный сервер отладки для
Application_Start()
событие, чтобы стрелять снова... вы должны иметь возможность щелкнуть правой кнопкой мыши на нем в системном трее и выбрать "стоп".
проблема
Application_Start()
сначала срабатывает, а затем подключается отладчик.Так что цель состоит в том, чтобы сделать что-то, что вызовет
Application_Start()
чтобы снова запустить, пока он все еще работает. Для целей отладки просто запустите отладчик, как обычно, затем отредактируйте (например, добавьте новую строку) и сохраните веб.конфигурационный файл.
Я нашел проблему:
Это приложение MVC было частью более крупного решения, в котором я в какой-то момент установил другой проект для сборки для среды x86 (я запускаю x64). Когда я это сделал, по-видимому, все другие проекты-даже те, которые были добавлены позже - были настроены не строить на
Ctrl+Shift+B
, и я полагаю, что именно поэтому отладчик не попал в мою точку останова.устранение:
перейдите в свойства построения решения (щелкните правой кнопкой мыши решение, выберите Свойства, и выберите построить в меню слева), и установите флажок построить рядом с именем проекта в списке.
в моем случае я использовал
локальный веб-сервер IIS в настройках веб-проекта
и я заменить на Использовать Сервер Разработки Visual Studio и это работает.
ниже техника работала для меня:
Простой обходной путь-коснуться глобального.asax после того, как отладчик присоединен, чтобы заставить приложение повторно использовать. Затем во время следующего запроса будет нажата точка останова, установленная в Application_Start.Я нашел это here:
http://connect.microsoft.com/VisualStudio/feedback/details/634919/cannot-debug-application-start-event-in-global-asax
в моем случае проблема была между креслом и клавиатурой - после переименования сборки проекта mvc я забыл обновить Global.asax, чтобы указать на правильный класс. Поэтому проверьте "наследует" в глобальном.asax (в visual studio щелкните правой кнопкой мыши на Global.эйсакс -> вид-разметка)
<%@ Application Codebehind="Global.asax.cs" Inherits="Monster.MgsMvc.Web.MvcApplication" Language="C#" %>
если он действительно соответствует вашему глобального.асакс.объявление класса/пространства имен cs
Я ударил с той же проблемой сегодня и использовал локальные IIS.
Я считаю, что это возникает из-за того, как страница загружается. Все, что вам нужно сделать, это поставить точку останова в Application_Start. Запустите приложение (в моем случае, это заняло экран входа в систему), а затем перейдите в интернет.конфиг. Отредактируйте его-добавив несколько пробелов. а затем "обновить" в браузере.это ударит по точке останова на Application_Start.
может мое решение поможет кому-то:
- остановить отладчик.
- обновить
RegisterRoutes
код (пример - добавить\удалитьint i = 1;
).- восстановить.
- поместите точку останова в
RegisterRoutes
.