Application_Start не стреляет? - PullRequest
139 голосов
/ 13 марта 2009

У меня есть приложение ASP.NET MVC (бета), над которым я работаю, и я не могу понять, что я делаю не так, или мой метод Application_Start в Global.asax.cs факт не срабатывает при попытке отладки приложения.

Я поставил точку останова в строке в моем методе Application_Start и ожидаю, что при попытке отладки приложения точка останова попадет ... но это никогда не произойдет. Не после перезагрузки IIS, не после перезагрузки, никогда. Я что-то пропустил? Почему этот метод никогда не вызывается?

Ответы [ 27 ]

164 голосов
/ 05 октября 2011

Примечание: хорошая простая альтернатива использованию встроенного «Visual Studio Development Server» или IIS Express (например, потому что вы разрабатываете с IIS и имеете определенные настройки вам нужно для правильной работы вашего приложения) просто продолжать работать в IIS (я использую пользовательский веб-сервер + запись в файле hosts + привязка IIS к тому же домену)

  1. дождитесь начала сеанса отладки, ок
  2. , затем просто выполните редактирование пробела в корневом web.config и сохраните файл
  3. обновить страницу (Ctrl + F5)

Ваша точка останова должна быть успешно достигнута, и вы можете продолжить отладку в своей естественной среде обитания IIS . Большой !

81 голосов
/ 13 марта 2009

Если это в IIS, приложение может быть запущено до того, как подключится отладчик. Если так, я не уверен, что вы можете спать достаточно долго, чтобы привязаться.

В Visual Studio вы можете присоединить отладчик к процессу. Вы можете сделать это, нажав Отладка >> Присоединить к процессу. Присоединитесь к браузеру, а затем нажмите ваше приложение. Чтобы быть в безопасности, перезапустите IIS и перейдите на сайт. Я не уверен на 100%, что это решит проблему, но это будет намного лучше, чем запуск режима сна в App_Start.

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

48 голосов
/ 04 июля 2013

В любом случае помогает следующее (независимо от того, используете ли вы IIS, Cassini или что-то еще):

  1. Установите точку останова в Application_Start
  2. Начать отладку (точка останова, скорее всего, не достигнута) -> страница отображается в браузере
  3. Измените web.config (например, введите пустую строку) и сохраните его
  4. Перезагрузите страницу в браузере -> достигнута точка останова!

Почему это работает? Когда web.config изменяется, веб-сервер (IIS, Cassini и т. Д.) Выполняет перезапуск, но в этом случае (по какой-либо причине) процесс остается прежним, поэтому вы присоединяетесь к нему с помощью отладчика (Visual Studio). ).

22 голосов
/ 22 декабря 2009

У меня тоже проблемы с точками останова в application_start с размещенным в IIS приложением. Хороший обходной путь - использование Debugger.Break (); в коде вместо точки останова VS

9 голосов
/ 11 февраля 2011

У меня точно такая же проблема. Я сделал много переименований в моем решении. После этого у меня появилось два неработающих веб-приложения, и еще несколько веб-приложений были в порядке. Я получил ошибку, что у меня неправильные маршруты. Когда я попытался установить точку останова в методе Application_Start, а затем перезапустить IIS, VS не прервал выполнение. С работоспособным веб-приложением перерыв работал. Затем я вспомнил, что «чистое решение» и «перестроение» не удаляют сборки, оставшиеся после переименования. И это было решением! Я вручную очистил каталоги bin моих багги-веб-приложений, а затем увидел новую ошибку в атрибуте Global.asax Inherits="", на которую ссылалась старая dll. Я поменял его на новый и перерыв стал работать. Предположим, что во время переименования Global.asax не обновлялся, и IIS взял старую сборку (с неверными маршрутами) для запуска приложения.

5 голосов
/ 20 апреля 2014

Была такая же проблема в проекте, который мы взяли на себя после того, как другой производитель его построил. Проблема заключалась в том, что, хотя предыдущий поставщик в Global.asax.cs написал несколько команд, которые могли бы заставить вас поверить, что он используется, он фактически полностью игнорируется. Global.asax не наследовал от него, и этот файл легко никогда не увидеть, если он присутствует .cs-файл - нужно щелкнуть правой кнопкой мыши Global.asax и нажать View Markup, чтобы увидеть его.

Global.asax:

<%@ Application Language="C#" %>

Необходимо изменить на:

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

Где ProjectNamespace - это пространство имен вашего класса Global.asax.cs (обычно это имя вашего проекта).

В нашем случае файл содержал ряд встроенного кода, некоторые из которых были скопированы из файла .cs, некоторые нет. Мы просто сбросили встроенный код в файл .cs и постепенно объединили наши изменения обратно.

5 голосов
/ 04 апреля 2011

Попробуйте переключить режим управляемого конвейера для пула приложений в «Классический» вместо «Интегрированный». Это решило проблему для меня. Разглядывая причину сейчас ...

(Реквизиты для этого ответа принадлежат Флоресу (см. Его комментарий к собственному ответу), я просто хотел представить это как отдельный ответ, чтобы привлечь к нему больше внимания)

4 голосов
/ 12 июня 2012

Убедитесь, что ваш global.asax не находится в подкаталоге. Он должен быть размещен на корневом уровне в вашем проекте.

4 голосов
/ 31 июля 2012

У нас была похожая проблема, когда global.asax.cs игнорировался.

Оказывается, сайт был обновлен с предварительно скомпилированного веб-сайта .NET 2 до сайта .NET 4.0. На сервере файл PrecompiledApp.config не был удален из корневой папки. После удаления и повторного использования пула приложений IIS и касания web.config для перезапуска приложения код в Global.asax.cs начал работать нормально.

3 голосов
/ 03 марта 2015

Однажды у меня возникла проблема, когда файлы Global.asax и Global.asax.cs фактически не копировались в папку IIS сценариями развертывания ... Так что это работало при отладке на сервере разработки, но не под IIS.

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