Подтвердить что ты не робот

Почему не запускается событие Application_Start() при отладке моего приложения ASP.NET MVC?

В моем файле Global.asax.cs у меня есть следующие подпрограммы:

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, очистить, перестроить снова и т.д., но ничего не работает. Почему приложение не запускает текущую версию кода?

4b9b3361

Ответ 1

Я нашел проблему:

Это приложение MVC было частью более крупного решения, в котором я в какой-то момент установил другой проект для построения среды x86 (я запускаю x64). Когда я это сделал, очевидно, что все другие проекты, даже те, которые были добавлены позже, были установлены не на Ctrl+Shift+B, и я полагаю, почему отладчик не ударил мою точку останова.

Решение:

Перейдите в свойства сборки решения (щелкните правой кнопкой мыши "Решение", выберите свойства и выберите "Построить в меню слева" ) и установите флажок "Сборка" рядом с именем проекта в списке.

Ответ 2

Я нашел следующий ответ на forums.asp.net:

Используете ли вы IIS7 в качестве сервера или встроенного веб-сервера? Я заметил при использовании IIS7, что, если вы запустите отладчик, отпустите страницу, затем измените Global.asax(файл разметки, а не код), пока отладчик все еще работает, а затем обновите страницу, точки останова в Application_Start будут удар.

Я думаю, что происходит то, что нажатие "play", VS просто запускает процесс, а затем присоединяется к нему, но к тому моменту, когда он присоединяется к нему, начальное событие уже запущено. Изменив Global.asax, вы заставите приложение перезагрузиться, и поскольку уже отложенный отладчик может попасть в точку останова. Не отличное решение, но, похоже, оно работает.

Это то, что происходило в моем случае.

Ответ 3

Добавьте System.Diagnostics.Debugger.Break(); в Application_Start().
Это заставит точку останова.

Эта строка должна быть прокомментирована, чтобы избежать точки останова для happern и #ifdef debug, чтобы убедиться, что она никогда не попадает в производство.

Ответ 4

Я считаю, что вам нужно закрыть/остановить локальный сервер отладки, чтобы событие Application_Start() снова запустилось... вы должны щелкнуть правой кнопкой мыши по нему в панели задач и выбрать "Остановить".

Ответ 5

Проблема состоит в том, что триггеры Application_Start() запускаются, затем отладчик присоединяется.

Таким образом, цель состоит в том, чтобы сделать что-то, что приведет к тому, что Application_Start() снова запустится, пока он все еще работает. Для целей отладки просто запустите отладчик, как обычно, затем отредактируйте (например, добавьте новую строку) и сохраните файл web.config.

Ответ 6

В моем случае я использовал

Локальный веб-сервер IIS в настройках веб-проекта

и я перехожу к Использовать сервер разработки Visual Studio, и это работает.

Ответ 7

Ниже техника работала для меня:
Простое обходное решение - это коснуться global.asax после того, как отладчик подключен, чтобы принудительно перезагрузить приложение. Затем во время следующего запроса будет удалена точка останова, установленная вами на Application_Start.

Я нашел это здесь:
http://connect.microsoft.com/VisualStudio/feedback/details/634919/cannot-debug-application-start-event-in-global-asax

Ответ 8

В моем случае проблема была между стулом и клавиатурой - после переименования сборки проекта mvc я забыл обновить Global.asax, чтобы указать на правильный класс. Поэтому проверьте "Наследование" в Global.asax(в визуальной студии щелкните правой кнопкой мыши на Global.asax → Просмотр разметки)

<%@ Application Codebehind="Global.asax.cs" 
  Inherits="Monster.MgsMvc.Web.MvcApplication" 
  Language="C#" %>

если он действительно соответствует объявлению класса global.asax.cs/namespace

Ответ 9

Сегодня я столкнулся с той же проблемой и использовал Local IIS.

Я считаю, что это происходит потому, что из-за загрузки страницы. Все, что вам нужно сделать, это установить точку останова в Application_Start. Запустите приложение (в моем случае он перешел на экран входа в систему), а затем перейдите в web.config. Отредактируйте его - добавив некоторые пробелы. а затем обновить в браузере., который попадет в точку останова на Application_Start.

Ответ 10

Возможно, мое решение поможет кому-то:

  • Остановить отладчик.
  • Обновите код RegisterRoutes (пример - add\remove int i = 1;).
  • Перестроить.
  • Поместите точку останова в RegisterRoutes.

Ответ 11

У меня только что возникла эта проблема и поменялся с Local IIS на IIS Express в свойствах проекта → веб, чтобы отсортировать его

Ответ 12

project → свойство → web

проверьте "Исходный код".

введите описание изображения здесь