Как уменьшить потребность в IISRESET для разработки веб-приложения ASP.NET в IIS 5.1

У меня есть проект веб-приложения на моем компьютере разработчика под управлением WinXP и, следовательно, IIS 5.1. Кажется, что изменения, которые я вношу на этом сайте, «вступают в силу» только после того, как я выполню IISRESET. То есть я делаю изменение источника, перестраиваю проект и затем запускаю без отладки (или с отладкой). Недавно измененный код не "видим" и не действует, если я не вмешаюсь с помощью IISRESET.

Кстати, вкладка "Интернет" в окне "Свойства" для проекта веб-приложения настроена на использование локального веб-сервера IIS по адресу проекта: http://localhost/myVirtualDirectory

...

но я заметил ту же проблему при использовании VStudio Dev Server (т.е. мне нужно остановить его, посетив область панели задач, чтобы увидеть, как мои исходные изменения вступили в силу).

Могу ли я что-то изменить?

ИЗМЕНИТЬ ОБНОВЛЕНИЕ:

Просто хочу прояснить это, если возможно. Два ответа расходятся ниже; не знаю, как двигаться дальше. Один утверждает, что этого следовало ожидать (слабость IIS 5.1, который, в свою очередь, является лучшим, что может предоставить WinXP). Другой заявляет, что это не ожидаемое поведение (и я склонен согласиться, поскольку это первое, что я установил на той же старой платформе WinXP dev, которая у меня была долгое время). Я подозреваю, что это может быть что-то «глубоко внутри» веб-приложения Visual Studio 2008, которое было обновлено до этой новой IDE с VStudio 2002 (ASP.NET 1.1). Я пытался добавлять комментарии / вопросы по каждому пути ответа. Спасибо.


person John Adams    schedule 17.02.2010    source источник
comment
@John Удалили ли вы все временные файлы asp.net?   -  person Aristos    schedule 14.04.2010


Ответы (7)


Это вообще ненормальное поведение. ASP.NET должен автоматически перезагружать все сборки, которые вы помещаете в каталог bin. Если вы используете динамическую компиляцию, она также должна подбирать новый код в файлах программной части.

Во-первых, убедитесь, что вы используете правильную директиву CodeFile или CodeBehind. CodeFile предназначен для динамической компиляции.

Если у вас есть проект веб-приложения и ваши исходные файлы .cs компилируются в DLL, убедитесь, что ваш проект помещает DLL в правильный каталог ... это / [ApplicationRoot] / bin.

person Bryan    schedule 17.02.2010
comment
Это было у меня на заднем плане какое-то время, но я хотел бы решить. Вы предполагаете, что это ненормально, но ребята, приведенные выше, подчеркивают, что это ТАКОЕ ТАКОЕ с IIS 5.1. Это решение ASP.NET (3 проекта) изначально было написано с использованием ASP.NET 1.1, и все файлы используют кодовую резервную копию (а не CodeFile). Не могли бы вы подробнее рассказать об этом? Может быть, это все! У меня есть проект веб-приложения, но у него есть исходные файлы .vb. На вкладке свойств проекта выходной путь сборки отображается как \ bin. Наконец, не совсем понимаю, что вы имеете в виду под динамической компиляцией - что это за параметр? Спасибо за ваше время. - person John Adams; 01.04.2010
comment
Я сам использую Windows XP для разработки приложений ASP.NET дома. Я сейчас не для того, чтобы перепроверять, но я на 99% уверен, что такое поведение, которое вы наблюдаете, не является поведением по умолчанию. Что-то отключает автоматическую перезагрузку AppDomain. Динамическая компиляция происходит, когда у вас есть директива CodeFile в файле aspx или ascx. Так что этого не происходит, не беспокойтесь. Вопрос: сбрасывается ли ваше приложение, если вы редактируете и сохраняете изменения в web.config? - person Bryan; 02.04.2010
comment
Провел несколько новых тестов, основанных на этих идеях: 1. Изменил мою строку подключения в web.config, а затем приложение не удалось, как я и ожидал (т.е. изменение было распознано, и я не смог подключиться). Считаете ли вы, что это сброс приложения? 2. Изменил мою домашнюю страницу, чтобы отображать другой контент; перестроить приложение и запустить; отображается старый контент (не текущий контент)! 3. Сделал IISRESET; 4. Выполнить показывает новое текущее содержимое после IISRESET; 5. Измените домашнюю страницу с CodeBehind на CodeFile; 6. Снова измените содержимое; создать приложение и запустить его, но новый контент НЕ отображается! 7. После IISRESET новое содержимое показывает ОК. - person John Adams; 02.04.2010
comment
1. Да, это будет сброс приложения. Эти другие вещи ... Трудно следить за вами без более подробной информации. Когда вы говорите, что изменил мою домашнюю страницу, вы имеете в виду ASPX? Если вы обновляете aspx и не видите изменений сразу, у вас проблема с кешированием, а не с ASP.NET. Но определенно не используйте CodeFile, если это ASP.NET 1.1, это ничего не даст. С какой версией ASP.NET настроен IIS для запуска этого приложения? - person Bryan; 03.04.2010
comment
Брайан, спасибо, что задержался здесь со мной ... Итак, приложение сбрасывается, когда я меняю web.config, но не сбрасывается, когда я меняю содержимое. В этом случае я не менял содержимое домашней страницы только через .ASPX; вместо этого я изменил оператор присваивания где-то в Page_Load в файле .ASPX.VB: Me.txtMessage.text = ... этот новый текст не будет отображаться, пока не будет выполнен IISRESET ... Все это было настроено в IIS 5.1 использовать ASP.NET 2.0. Я только изменил домашнюю страницу с Codebehind на Codefile для этого теста. Большая часть файлов .aspx использует программную часть. Надеюсь, это поможет. Посмотрим на кеширование. - person John Adams; 05.04.2010
comment
Я вижу несколько возможностей: 1) IIS настроен на добавление заголовка срока действия, который вызывает недопустимое кеширование. 2) Кто-то намеренно отключил уведомление об изменении файла для IIS. (найдите в StackOverflow, как это делается) 3) Ваш браузер кэширует страницы. Принудительно обновить. 4) Ваша установка IIS просто сломана. Протестируйте его на чистой сборке XP с IIS. 5) У вас есть некоторые .cs в App_Code, который используется вместо кода, который, по вашему мнению, используется. Я определенно рекомендую НЕ смешивать директивы CodeBehind и CodeFile. - person Bryan; 06.04.2010
comment
Что-то сломалось в твоей коробке. Я использую XP и 2k8 для своего разработчика, и он перекомпилируется всякий раз, когда я меняю страницу. Убедитесь, что вы используете CodeFile и динамическую перекомпиляцию, как указано выше. В противном случае у вас может быть день простоя ... Хотел бы я предложить больше, это мои 0,02 доллара - person jcolebrand; 13.04.2010

Это не изменит его, но вы можете сделать IISReset частью вашего сценария после сборки.

person No Refunds No Returns    schedule 17.02.2010
comment
Похоже, вы подтверждаете, что это нормально, и этого нельзя избежать, настроив что-нибудь где-нибудь. Если это так, как я могу сделать IISRESET частью сценария после сборки? - person John Adams; 17.02.2010
comment
Неважно, я нашел, где добавить IISRESET в сценарий пост-сборки. Но подтверждаете ли вы, что это нормальное поведение и единственный обходной путь - сценарий после сборки? - person John Adams; 17.02.2010
comment
У вас есть масса вариантов: обновить до VS2008 / VS2K10, использовать другую систему, скопировать вашу сборку на другой сервер и т. Д. IIS 5 был обновлен не просто так. Извините, но это состояние штата. Я помню, когда IISRESET БЫЛ обновлением, и это было не так давно. - person No Refunds No Returns; 17.02.2010
comment
Я смирялся с необходимостью сброса IIS 5.1, но хотел бы узнать больше, чтобы решить эту проблему. Вопрос о вашем списке опций: (a) Я уже использую VS2008, но это платформа WinXP IIS 5.1 (b) при использовании другой системы, я думаю, вы имеете в виду отказаться от этой старой машины WinXP dev, которую я использую (c) скопирует вашу сборку на другой сервер, разрешите для интерактивной отладки во время тестирования [я предполагаю, что этот подход не допускает точек останова ..]. Наконец, этот другой товарищ Брайан предполагает, что это ненормально, плюс я, кажется, припоминаю, что мне не приходилось делать этот сценарий после сборки раньше. Спасибо за ваше время. - person John Adams; 01.04.2010

Я должен сказать, что это нестандартное поведение. Я уже некоторое время занимаюсь разработкой в ​​VS2005 и использую системы XP, 2003 и более поздних версий. Но даже на XP у меня этого никогда не было.

В прошлом году двое моих коллег по-прежнему использовали XP для разработки веб-приложения, над которым мы работали. И мы работали над ТОЧНОЙ той же кодовой базой, которая используется в репозитории SVN. У одного из них была такая же проблема. у вас есть здесь, и мы не смогли найти решение, и мы просто оставили его как есть ... Компьютер другого сотрудника работал абсолютно нормально (оба на идентичном оборудовании)

Это печальная история, потому что в конце концов его IIS настолько запутался, что ему пришлось использовать вместо этого веб-сервер VS в течение нескольких месяцев, пока системный администратор не согласился переустановить Windows в своем ящике :)

Боевой дух истории? Я думаю, что ваша установка Windows / IIS испорчена ... Попробуйте получить последние обновления от MS, и если ничего не помогает - я бы порекомендовал выполнить чистую установку .. Извините, но надеюсь, что это поможет ...

person Artiom Chilaru    schedule 20.04.2010
comment
Спасибо, что нашли время, чтобы прочитать это и внести свой вклад. Я тоже не считал это правильным поведением. Думаю, я смогу жить с этим, пока не получу новую, лучшую машину разработки, на которой я смогу выйти за рамки IIS 5.1. - person John Adams; 22.04.2010

Вы можете проверить раздел реестра, расположенный здесь:

HKLM \ Software \ Microsoft \ ASP.NET \ FCNMode

Если вы видите этот раздел реестра, убедитесь, что он установлен на 0 или больше 2. Если он установлен на 1, ASP.NET не будет получать уведомление об изменении файла при сборке, и вы будете испытывать точные симптомы, которые вы описываете. Каждый раз, когда вы создаете свое веб-приложение, оно должно перезапускаться. Если этого не происходит, возможно, это ответ.

person Eric    schedule 29.04.2010

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

person dh.    schedule 19.04.2010

У меня были подобные проблемы в прошлом. Что всегда будет вызывать правильную перезагрузку приложения, так это ЛЮБЫЕ изменения в файле web.config.

Просто вставьте пустую строку в конец и сохраните ее, и веб-приложение будет перезагружено при следующей загрузке страницы. Для своих целей я создал сценарий, который делает это после каждой сборки. Звучит просто, но работает всегда.

person ntziolis    schedule 20.04.2010

Была та же проблема, и мне удалось найти странный ответ.

Проблема: когда исходный код редактируется, а IIS не хочет обновлять редактирование.

В разделе «Параметры проекта», «Интернет» я изменил серверы на «Использовать сервер разработки Visual Studio» вместо «Использовать веб-сервер IIS».

Затем запустил VS Development Server с F5, чтобы я мог видеть изменения после редактирования исходного кода. Я покинул настройку, но затем перешел на свою домашнюю страницу, используя вместо этого сервер IIS. Сейчас изменения обновляются как надо.

Итак, если оставить IIS и сказать, что он НЕ будет использоваться в настройках проекта. IIS получает новый исходный код и отображает изменения.

person Niike2    schedule 14.07.2010