Я не могу отладить файл global.asax!Можно ли отлаживать Global.asax?
У меня есть коды в методе Application_Start()
, но когда я устанавливаю точку прерывания в методе, он игнорируется!
Это нормально?
Я не могу отладить файл global.asax!Можно ли отлаживать Global.asax?
У меня есть коды в методе Application_Start()
, но когда я устанавливаю точку прерывания в методе, он игнорируется!
Это нормально?
Может быть, вы должны попробовать:
Да, это нормально.
Application_Start()
обрабатывается IIS.
Но все другие методы, например Session_Start
, и все остальные, кроме Application_Start()
, можно отлаживать нормально.
Application_Start()
вызывается один раз за AppDomain. Если вы не ударять вашу контрольную точку, это означает, что AppDomain был уже создан, поэтому сделайте следующее:
Убедитесь, что ваш веб-приложение находится в режиме отладки (<compilation debug="true">
в web.config).
Если вы используете разработчик IIS, запущенный VS, просто перезапустите его или перестройте приложение.
Если вы на обычном IIS у вас есть два варианта:
Debug - Attach to process
, введите имя компьютера и затем выберите процесс для отладки. Обычно w3wp.exe работает в режиме управляемого режима.благодарю вас за ответ. Я использую IIS через VS. – mahdiahmadirad
Простой способ разрыва в Application_Start()
- использовать класс System.Diagnostics.Debugger
. Вы можете заставить приложение сломаться, вставив System.Diagnostics.Debugger.Break()
, где вы хотите, чтобы отладчик сломался.
void Application_Start(object sender, EventArgs e)
{
System.Diagnostics.Debugger.Break();
// ...
}
Удалить global.asax
и добавить новый. В моем решении были global.asax
и global.asax.cs
.
Все методы (Session_Start
, Application_Start
, ...) были в бот-файлах, но были рассмотрены только те, что были в global.asax
. Таким образом, точки останова и код в cs ничего не делают.
Только после воссоздания файла у global.asax.cs
были соответствующие методы, и они бежали.
Я выполнил следующие инструкции: http://rossnelson.blogspot.ca/2005/11/fixing-globalasax-in-aspnet-20.html. В принципе, удалите global.asax и добавьте глобальный класс приложения, который воссоздает asax с кодом за файлом, который затем я могу выполнить. Я работаю на IIS, и он работает нормально. – cbeuker
Это также называется «Прикосновение к web.config» и может использоваться для нескольких сценариев, когда вам нужно обновить свой сайт, не касаясь IIS. Не могу поверить, что это не произошло со мной. Благодарю. – HockeyJ
Хотелось бы, чтобы все было так просто. Но для меня? «компьютер говорит« нет » – Justin
Другая альтернатива принятому System.Diagnostics.Debugger.Break();
будет
void Application_Start(object sender, EventArgs e)
{
System.Diagnostics.Debugger.Launch();
//...
}
, который не должен нарушать код и должен запустить отладчик, даже если услуга были начаты с различными правами.
это хорошо, я попробовал, и это сработало для меня тоже ... спасибо –
Не ожидайте немедленного вызова функции Application_Start() нажатием f5. Application_Start() вызывается только во время первого запроса к приложению. Странно, но это правда.
В случае, если все ответы не работает, попробуйте:
<compilation debug="true" ... />
в web.config
. ;)
Странно, что это было отмечено как ответ, но имеет рейтинг -2 ... –
У этого есть минус-рейтинг, потому что это неправильно. Правильно сказать, что вам нужно отлаживать (или у вас нет файлов pdb), и вам нужно захватить сервер при его запуске (потому что это когда этот код запущен), но вы не сможете для присоединения к процессу. Для присоединения отладчика вам нужно выполнить процесс, код global.asax запускается за первые несколько секунд этого процесса, поэтому это практически невозможно (без использования [правильного ответа ниже] (https://stackoverflow.com/a/ 4809464/542251)) для присоединения к процессу при выполнении этого кода – Liam