Почему не происходит событие Application_Start () при отладке приложения ASP.NET MVC? - PullRequest
65 голосов
/ 09 июня 2009

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

Ответы [ 12 ]

104 голосов
/ 02 декабря 2010

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

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

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

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

25 голосов
/ 27 марта 2012

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

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

18 голосов
/ 09 июня 2009

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

12 голосов
/ 11 сентября 2015

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

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

6 голосов
/ 10 июня 2009

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

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

Решение:

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

5 голосов
/ 22 августа 2014

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

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

4 голосов
/ 30 июля 2014

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

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

4 голосов
/ 21 апреля 2014

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

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

и я изменяю на Используйте Visual Studio Development Server , и это работает.

3 голосов
/ 06 февраля 2014

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

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

если оно действительно соответствует объявлению класса / пространства имен Global.asax.cs

0 голосов
/ 26 июля 2017

проект -> недвижимость -> сеть

отметьте "Нативный код".

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...