Application_Start не запускається?


143

У мене є програма ASP.NET MVC (beta), над якою я працюю, і у мене виникають проблеми з'ясувати, чи я щось роблю не так, або якщо мій Application_Startметод на Global.asax.cs насправді не спрацьовує під час спроби для налагодження програми.

Я поставив точку перерви на лінію в своєму Application_Startметоді і очікую, що при спробі налагодження програми, точка точки розриву повинна потрапити ... але це ніколи не відбувається. Не після того, як я скидаю IIS, не після перезавантаження, ніколи. Я щось пропускаю? Чому цей метод ніколи не називають?


Чи успадковується ваша сторінка global.asax від глобального класу, в якому знаходиться ваш метод?

Я підскочив у випадку, коли global.asaxфайл просто відсутній. так що це також варто перевірити :-)
itho

Відповіді:


85

Якщо це в IIS, додаток можна запустити до того, як налагоджувач додається. Якщо це так, я не впевнений, чи зможете ви довгий час спати, щоб прив'язатися.

У Visual Studio ви можете приєднати налагоджувач до процесу. Для цього натисніть кнопку Налагодити >> Приєднати до обробки. Приєднайте до браузера, а потім натисніть програму. Щоб забезпечити безпеку, перезапустіть IIS і натисніть на сайт. Я не на 100% впевнений, що це вирішить проблему, але це зробить набагато краще, ніж відключення режиму сну в App_Start.

Інший варіант тимчасово розміщується на вбудованому веб-сервері, поки ви не закінчите запуск програми налагодження.


21
щоб розгорнути - (у VS2010, використовуючи тип проекту MVC 3) клацніть правою кнопкою миші веб-проект> властивості> веб (вкладка) та переконайтесь, що вибрано «Використовувати сервер розвитку Visual Studio». Тоді ваші точки точки зупинки Application_Start повинні бути вдалі.
MemeDeveloper

Дякуємо @MemoDeveloper !! Це чудово !!
Praveen Prajapati

2
Ааааааа, я втратив пару годин. Знову !! Дякую за цю відповідь. :)
Самуель

Якщо ви встановите точку розриву в Visual Studio на Global.asax.cs під Application_Start (), і вона не спрацьовує, перевірте тип складання. Якщо ви працюєте як реліз, ця точка перерви може не спрацювати. Перейдіть на налагодження, і він повинен зупинитися.
Павло

171

Примітка: приємна проста альтернатива використанню вбудованого "Visual Studio Development Server" або IIS Express (наприклад, тому, що ви розвиваєтеся проти IIS і маєте певні налаштування , необхідні для правильного функціонування вашої програми) - це просто продовжувати працювати в IIS (I використовувати користувальницький веб-сервер + запис файлів хостів + ​​IIS, прив'язку до цього домену)

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

Ваша точка розриву повинна бути добре вдарена, і ви можете продовжувати налагоджувати свої природні умови проживання IIS . Чудово!


Це геніальний AppDomain переробляти підключення. Дякую !!
Санджай10

Більше немає сервера розробки Visual Studio. stackoverflow.com/questions/19676527 / ...
mac10688

1
@ mac10688 правда, але все ж є "IIS Express", який все ще не є виробничим середовищем. Відповідно оновив відповідь спасибі.
MemeDeveloper

Однозначно прийнята відповідь. Я вказую пристрої на свій IIS, які не дозволять спілкуватися під час використання видання IIS Express! Це спрацювало принадністю.
Метт Скелдон

54

Наведене нижче допомагає у будь-якому випадку (незалежно від того, використовуєте ви IIS, Cassini чи інше):

  1. Встановіть точку перерви в Application_Start
  2. Почніть налагодження (точка розриву, швидше за все, не потрапила) -> у браузері відображається сторінка
  3. Змініть web.config (наприклад, введіть порожній рядок) і збережіть його
  4. Перезавантажте сторінку у браузері -> точка перелому потрапила!

Чому це працює? Коли web.config змінюється, веб-сервер (IIS, Cassini та ін.) Робить переробку, але в цьому випадку (з будь-якої причини) процес зберігається тим самим, тому ви залишаєтеся приєднаними до нього за допомогою відладчика (Visual Studio ).


3
Клон, через два роки від stackoverflow.com/a/7655582/11635 - розгляньте питання про видалення та
додавання

насправді @RubenBartelink, я вважаю, що ця відповідь чіткіша, ніж інша, через формулювання та додаткові пояснення.
Херіберто Луго

1
@HeribertoLugo Я з цим крутий - 50 оновлень важко не погодитись із цим (тим не менш, я би радий редагувати іншу відповідь, щоб усунути прогалину, якщо хтось має час і контекст; пройшов якийсь час, як я " Ви використовували налагоджувач на IIS!)
Рубен Бартелінк

Я погоджуюся редагувати інший та видалити цей, був би кращим маршрутом .. Я побачив другий перший і слідом за ним трохи відключився, тому він не працював .. Коли я побачив цей, витративши на нього ще півгодини, тоді він зробив більше сенсу .. ось півгодини мені не потрібно було втрачати ..
Херіберто Луго

22

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


2
Я вірю, що не впливати на точку перерви як щось, що стосується запуску пулу додатків у режимі інтегрального конвеєра. Ви використовуєте це?
Флорес

9

У мене якраз та сама проблема. Я багато перейменував у своєму рішенні. Після цього я отримав два не працюючих веб-додатки та кілька інших веб-додатків. Я отримав помилку, що у мене неправильні маршрути. Коли я спробував встановити точку розриву в Application_Startметоді, а потім перезапустити IIS, VS не порушив виконання. З працюючими веб-додатками працював перерва. Тоді я нагадав, що "чисте рішення" та "відновити" не видаляють збірки, що залишилися після перейменування. І це було рішення! Я вручну очистив binкаталоги своїх баггі-веб-додатків, а потім побачив нову помилку в Global.asax Inherits=""атрибуті, на яку посилався старий DLL. Я змінив це на нове і перерва почала працювати. Припустимо, що під час перейменування Global.asax не було оновлено,


Нічого собі, це був біль знайти! Це для поради!
Ландон Поч

@Dao Дійсно, це приголомшливо, спасибі;) Я витратив на це пару годин, я повинен був би знайти свою відповідь раніше :)
Pankaj Parkar

7

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

Global.asax:

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

Потрібно змінити:

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

Якщо простір ProjectNames є незалежним від простору імен вашого класу Global.asax.cs (зазвичай це назва вашого проекту).

У нашому випадку файл містив купу вбудованого коду, частина якого була вставлена ​​копією з файлу .cs, а деякі - ні. Ми просто перекинули вбудований код у файл .cs і поступово об'єднали наші зміни.


Це було все. Я додав виняток до запуску програми (відповідно до відповіді ZERO ув'язненого), і він взагалі не запускався, тому нічого не має відношення до налагоджувача. Оновлення розмітки Global.asax виправило її.
Патрік Боркович

5

Спробуйте переключити режим керованого конвеєра для пулу додатків на "Класичний" замість "Інтегральний". Це вирішило для мене проблему. Розглядаючи причину зараз ...

(Реквізити для цієї відповіді належать Флорес (див. Його коментар до власної відповіді). Я просто хотів надати це як окрему відповідь, щоб привернути до неї більше уваги)


Так, це працює. Але якщо ви припускаєте, що ваша програма повинна працювати в інтегрованому пулі додатків, то вона також повинна бути налагоджена під інтегрованим пулом.
Karel Kral

Мій додаток також не потрапляє на точки прориву після "F5", коли я перейшов з класичного на інтегрований. Ви коли-небудь відкривали, чому? У мене немає жодних вимог використовувати інтегрований, але це відлякує, коли ці речі не працюють без пояснених причин.
CodexArcanum

5

Переконайтеся, що ваш global.asax не знаходиться в підкаталозі. Він повинен бути розміщений на кореневому рівні у вашому проекті.


Дуже дякую!!! Ти врятував мене від божевілля! Саме це було причиною моєї проблеми.
Ян Дюран

1
Моє питання полягало в тому, що я просто створив клас, який називався, Global.asax.csі очікував, що він буде працювати. Створити його потрібно за допомогою Add-> New Item->, Global Application Classщоб він створювався за допомогою відповідного Global.asaxконфігураційного файлу веб-форм.
Леві Фуллер

4

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

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


3

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


У мене була така ж проблема. після завантаження Global.asax на сервер, проблема вирішена.
Мусульманка Хаді

3

Пізній запис ...

Щоб перевірити, чи не запускається програма IIS до того, як у налагоджувача було достатньо часу, щоб приєднати, просто додайте це до верхньої чи нижньої частини вашого GLOBAL.ASAX Application_Start.

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

2

Коли ви говорите "налагодження", ви маєте на увазі фактичне запуск програми із вбудованого веб-сервера Visual Studio для налагодження, чи ви маєте на увазі приєднання до процесу в IIS? Якщо це перше, вам слід натиснути Application_Start, але якщо це останнє, може бути важко бути досить швидко в процесі, щоб зловити його.


Правильно, я маю на увазі запуск програми від VS. У мене він розміщений в IIS, тому VS приєднується до цього процесу. Ви хочете сказати, що подія стартує раніше, перш ніж VS може приєднатися до процесу?
Боб Yexley

2

Закрити У Visual Studio і видалити binі objпапки в веб - проект (або всіх проектів в розчині).

Ось команди для видалення цих папок з усіх ваших проектів:

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

2

Я вніс деякі зміни на основі "Аналіз коду в збірці" від Visual Studio. Аналіз коду запропонував "CA1822 Позначити членів статичними" для Application_Start () у Global.asax. Я це зробив і закінчився цією проблемою.

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

Я повернувся до цього методу-підпис, і Application_Start () знову запустив:

    protected void Application_Start()
    { ... }

2

Я зіткнувся з цією проблемою, коли використовував статичну сторінку (наприклад, index.html) як сторінку запуску - Application-Start не викликається. Я виявив, що розміщення статичної сторінки насправді не запускає програму. Запит на .aspx сторінку робить.


Це те, що зробило це для мене. Дякую.
reekeecast

2

Переконайтесь, що простори імен у Global.asax та Global.asax.cs однакові. Якщо вони різні, це не призведе до помилок, але не вдарить за точку розриву також тому, що він зовсім не виконує application_start.


1

Я думаю, що подія запуску програми звільняється лише тоді, коли зроблено перший запит, ви потрапляєте на ваш веб-сайт (тобто ви робите запит)?


Так, я запитую заявку.
Боб Yexley

1

Я мав цю проблему в проекті .net 4 веб-форм vs2010 і спробував усе, що згадується на цій сторінці. Закінчилося видалення та додавання global.asax фактично вирішило проблему для мене.


1

Я мав ту саму проблему, не міг зловити Application_Start. Причина полягала в тому, що це було не запускати помилку у файлі розмітки. Файл розмітки Global.asax успадкував інший клас ...


1

Ви перевірили налаштування проекту? У мене виникла ця проблема, і я почав URL-адресу переходити до іншого порту, ніж конкретний для мого сервера. Мені знадобилося занадто багато часу, щоб зрозуміти ...


1

Спробувавши стільки ж інших відповідей, які були застосовні в моїй ситуації, і не пощастивши жодному з них, я зайшов у властивості для веб-проекту (серверний проект для програми Silverlight з використанням послуг RIA), натиснув на Вкладка "Веб" та змінила вибраний Сервер з "Локального IIS" на "IIS Express". (Примітка. Я використовую VS2013.) Це вирішило проблему. Application_Start виконується під "IIS Express", але не під "Local IIS". Цікаво ...


Це виконується. Ви просто не можете його налагодити, оскільки ви або не приєдналися до процесу IIS, або приєдналися до нього після його виконання.
uygar.raf

1

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



0

Якщо ви використовуєте System.Diagnostics.Debugger.Break (); вирішення проблеми (що, на мою думку, є чудовим для тимчасового використання), і це "просто не працює" на вашій машині Windows 8. Причина - помилка у програмі 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


0

У моєму випадку вбивство вбудованого екземпляра сервера розвитку ASP.NET через системний трей вирішило проблему.


0

Дивні та шалені речі ... але налагодження на серверній машині та інший користувач залишили IIS Express працювати на їх сеансі. Мені довелося вийти з цього користувача, щоб убити його запущені процеси IIS Express. Це, здається, вирішило проблему!

Оновлення

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

введіть тут опис зображення


0

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

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

0

Проблема головним чином виникає при спробі перемістити файл Global.asax в інший каталог рішень. Перемістіть файл Global.asax знову в місце за замовчуванням. Він буде працювати, як очікувалося.


Що робити, якщо все на веб-сайті попередньо складено, включаючи Global.asax.aspx? Я маю попередньо складені файли у каталозі bin. Application_Start не запускається.
Він Шахдар

0

Жодне з описаних вище рішень для мене не працювало. Однак перевстановлення пакета

Microsoft.CodeDom.Providers.DotNetCompilerPlatform 

використання Nuget Gui - це (не надто приємна) прогулянка

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.