Application_Start не стреляет?

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

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

Ответ 1

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

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

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

Ответ 2

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

  • подождите, пока отладочная сессия не запустится.
  • то просто сделайте прописную строку в корневой web.config и сохраните файл
  • обновите свою страницу (Ctrl + F5)

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

Ответ 11

Поздняя запись...

Чтобы проверить, запускается ли приложение IIS до того, как отладчик имеет достаточно времени для добавления, просто добавьте его в верхнюю или нижнюю часть вашего GLOBAL.ASAX Application_Start.

throw new ApplicationException("Yup, it fired");

Ответ 12

Когда вы говорите "debug", вы имеете в виду фактически запускать приложение из встроенного веб-сервера Visual Studio для отладки или вы имеете в виду присоединение к процессу в IIS? Если это первое, вы должны нажать Application_Start, но если это последний, может быть трудно быть в процессе достаточно рано, чтобы поймать его.

Ответ 13

Закройте Visual Studio и удалите папки bin и obj в своем веб-проекте (или все проекты в решении).

Вот команды для удаления этих папок из всех ваших проектов:

rm *\bin -r
rm *\obj -r

Ответ 14

Я сделал некоторые изменения на основе "Code Analysis on Build" из Visual Studio. Анализ кода предложил "CA1822 Отметить участников как статические" для Application_Start() в Global.asax. Я сделал это и закончил с этой проблемой.

Я предлагаю подавить это сообщение анализа кода и не изменять подпись методов/классов, автоматически созданных платформой, используемой для начальной загрузки приложения. Подпись метода Application_Start, вероятно, была нестатической по какой-либо причине.

Я вернулся к этому методу-сигнатуре, а Application_Start() снова выстрелил:

    protected void Application_Start()
    { ... }

Ответ 15

Я столкнулся с этой проблемой при использовании статической страницы (например, index.html) в качестве начальной страницы - Application-Start не вызывается. Я обнаружил, что обслуживание статической страницы фактически не запускает приложение. Запрос страницы .aspx делает.

Ответ 16

Убедитесь, что пространства имен в Global.asax и Global.asax.cs одинаковы. Если они отличаются друг от друга, это не вызовет никакой ошибки, но не ударит точку останова также из-за того, что она вообще не выполняет application_start.

Ответ 17

Я думаю, что событие запуска приложения запускается только при первом запросе, вы нажимаете на свой сайт (т.е. делаете запрос)?

Ответ 18

У меня была эта проблема в проекте .net 4 web forms vs2010 и пробовал все, что упоминалось на этой странице. Закончилось удаление и добавление global.asax действительно разрешило проблему для меня.

Ответ 19

У меня была такая же проблема, я не смог поймать Application_Start. И причина в том, что он не стрелял в missmatch в файле разметки. Файл разметки Global.asax наследует другой класс...

Ответ 20

Вы проверили настройки проекта? У меня была эта проблема, и у меня был начальный URL-адрес для другого порта, чем у моего конкретного сервера. Мне потребовалось слишком много времени, чтобы понять...

Ответ 21

После того, как многие другие ответы, которые были применимы в моей ситуации, и мне не повезло ни с одним из них, я вошел в свойства для веб-проекта (проект на стороне сервера для приложения Silverlight с использованием служб RIA) нажал на вкладку "Веб" и изменил выбранный сервер с "Local IIS" на "IIS Express". (Примечание. Я использую VS2013.) Это решило проблему. Application_Start выполняется под "IIS Express", но не под "Local IIS". Интересно...

Ответ 22

Я пытался выполнить код в RegisterRoutes(), вызванный из запуска приложения, и не ударил точку останова. Я решил, что Application_Start не будет вызван. Мне пришлось внести изменения, чтобы внести поверхностные изменения в App_start/RouteConfig.cs и сохранить их до того, как будет вызван Application_Start. Я думаю, что эти файлы кэшируются где-то и не вызываются, если не сделано изменение.

Ответ 23

Если вы используете System.Diagnostics.Debugger.Break(); обходной путь (который, я думаю, подходит только для временного использования), и он "просто не работает" на вашей машине Windows 8. Причина - ошибка в Visual Studio "Просто вовремя отладки".

Исправление состоит в том, чтобы исправить ключ для "Отладчика" Just-In-Time Debugger "Visual Studio

Откройте regedit и перейдите к HKEY_CLASSES_ROOT\AppID {E62A7A31-6025-408E-87F6-81AEB0DC9347} для значения реестра AppIDFlags установите флаг 0x8

Подробнее здесь: http://connect.microsoft.com/VisualStudio/feedback/details/770786/just-in-time-debugging-operation-attempted-is-not-supported

Ответ 24

В моем случае уничтожение встроенного экземпляра сервера разработки ASP.NET через системный лоток устраняет проблему.

Ответ 25

Странные и сумасшедшие вещи... но отладка на серверной машине, а другой пользователь оставил IIS Express на своем сеансе. Мне пришлось покинуть этот пользователь, чтобы убить его запущенные процессы IIS Express. Это, похоже, устранило проблему!

Обновление

Проведя более 1 часа, преследуя причину проблемы... здесь сделка: мне несколько удалось набрать s внутри раздела <appSettings> в Web.config. Visual Studio попыталась предупредить меня в окне Error List с предупреждением. Признаюсь, я редко проверяю предупреждения... должен начать проверять это с этого момента.: D Как только я удалил оскорбление s, точка останова попала в Application_Start.

enter image description here

Ответ 26

У меня возникла эта проблема при попытке инициализировать log4net. Я решил просто создать статический конструктор для Global.asax

static Global(){
//Do your initialization here statically
}

Ответ 27

Проблема возникает, когда вы пытаетесь переместить файл Global.asax в другой каталог решений. Переместите файл Global.asax снова в папку по умолчанию. Он будет работать, как ожидалось.

Ответ 28

Ни одно из описанных выше решений не помогло мне. Однако переустановка пакета

Microsoft.CodeDom.Providers.DotNetCompilerPlatform 

использование nuget gui - это (не слишком хороший) обход