Почему не запускается приложение () событие пожара, когда я отлаживаю мой 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 61

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.

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

  1. остановить отладчик.
  2. обновить RegisterRoutes код (пример - добавить\удалить int i = 1;).
  3. восстановить.
  4. поместите точку останова в RegisterRoutes.

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

проект - > свойство - > web

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

enter image description here