Подключаемый модуль TFS 2012 для Visual Studio мгновенно создает и удаляет файл app_offline.htm всякий раз, когда файл извлекается, что приводит к перезапуску домена приложений ASP.NET.

У меня проблема с Visual Studio 2012, которая сводит меня с ума. Мы разрабатываем веб-приложение ASP.NET, и при запуске приложения оно должно загружать в память много материала. Иногда требуется от 20 до 30, чтобы он запустился и был готов к серверу первых HTTP-запросов.

Мы используем систему управления версиями TFS, и каждый раз, когда кто-то редактирует файл, TFS помечает файл как «извлеченный» (маленькая красная галочка появляется рядом со значком имени файла в обозревателе решений) И мгновенно создает и удаляет « app_offline.htm" в корне веб-приложения.

Это приводит к выгрузке веб-приложения. Я использовал регистрацию в событиях Application_Start и Application_End, чтобы выяснить это. Затем я использовал SysInternals Process Monitor, чтобы увидеть, что происходит. Когда я увидел, что app_offline.htm упоминается в загадочном выводе procmon, я использовал отдельный наблюдатель за файловой системой под названием «Монитор каталогов», который подтвердил, что app_offline.htm действительно создается и мгновенно удаляется.

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

Мало того, постоянная перезагрузка домена приложения приводит к тому, что IIS в конечном итоге исчерпывает память, и тогда нам приходится выполнять IISRESET.

Кто-нибудь знает, почему TFS создает этот файл? И есть ли способ его остановить?


person krisdyson    schedule 04.06.2013    source источник


Ответы (2)


Я обнаружил обходной путь.

1) Перейдите в папку, в которой Visual Studio кэширует файл app_offline.htm C:\Users[user]\AppData\Roaming\Microsoft\VisualStudio\11.0\ (замените [user] своим именем пользователя)

2) Удалить файл app_offline.htm

(ПРИМЕЧАНИЕ: само по себе это не решит проблему, так как VS снова создает файл, когда он не найден)

3) Создайте каталог с именем app_offline.htm (КАТАЛОГ!)

По сути, это вызывает ошибку процесса, который пытается использовать файл, потому что это не файл, а конфликт имен означает, что VS не может попытаться воссоздать файл. К счастью, ошибка не имеет нежелательных побочных эффектов.

Теперь продолжайте использовать VS и Team Foundation Server и наслаждайтесь отсутствием постоянной перезагрузки домена приложения!

person krisdyson    schedule 05.06.2013

Если вы будете публиковать из Visual Studio в каталог под IIS, то это произойдет. И VS 2012 хранит этот файл по адресу

C:\Users\[user]\AppData\Roaming\Microsoft\VisualStudio\11.0\app_offline.htm

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

После того, как вы удалите сопоставление (публикация непосредственно на сервер), я уверен, что когда вы «извлечете» файл, он не будет мгновенно создавать и удалять файл «app_offline.htm» в корне веб-приложения. Надеюсь, поможет.

person microtechie    schedule 04.06.2013
comment
Привет, я не публикую приложение. Просто развиваю. Я попытался удалить файл app_offline.htm из указанного вами места, но, к сожалению, система создает его заново. - person krisdyson; 04.06.2013
comment
Используете ли вы Visual Studio для публикации файлов непосредственно в IIS? - person microtechie; 04.06.2013
comment
Привет, никакой публикации, просто IIS указывает на исходный каталог, как обычно. Спасибо - person krisdyson; 04.06.2013
comment
Вы можете использовать Process Monitor для проверки, так как это может быть какая-то другая программа, такая как антивирус и т. д., вы можете найти Process Monitor здесь technet.microsoft.com/en-us/sysinternals/bb896645.aspx - person microtechie; 04.06.2013
comment
Да, в procmon похоже, что TFS каким-то образом создает файл app_offline.htm в корне, который запускает ASP.NET/IIS для выгрузки домена приложения, а затем перезагружает его. - person krisdyson; 04.06.2013