Пользовательский файл app_offline.htm во время публикации
Когда я публикую свое приложение ASP.NET MVC, оно генерирует файл app_offline.htm, чтобы перевести сайт в автономный режим, пока он обновляет сайт, а затем удаляет файл после успешного завершения публикации.
Это круто, и мне действительно нравится эта идея, но я хочу создать свой собственный файл app_offline.htm, о котором известно действие публикации, и поместить его туда, где он не влияет на мой сайт разработки - т.е. корень моего сайта разработки постоянно переводит его в автономный режим.
РЕДАКТИРОВАТЬ: Из комментариев на пост Скотта Гу о app_offline.htm, кажется, что настройка файла app_offline.htm была невозможна с VS 2005 - изменилось ли это с VS 2008 и теперь VS 2010?
8 ответов
Я знаю, что это старо, но так как я нашел решение после просмотра здесь, я подумал, что должен дать ответ. VS 11 проводит издание app_offline.htm
файл в этом месте:
C:\Users\[user]\AppData\Roaming\Microsoft\VisualStudio\11.0\app_offline.htm
Я проверил это и настроил его, и он работает, если вы измените этот файл. Недостатком, конечно, является то, что этот файл используется для всех веб-публикаций.
Простое решение, которое многие могут найти подходящим, включает в себя просто добавление собственного файла с именем "app_offline.htm"
к вашему решению.
Я протестировал этот метод с использованием Visual Studio 2015, и он действительно работает.
Однако единственным недостатком является то, что в процессе публикации генерируется значение по умолчанию. app_offline.htm
Сначала копируется файл, а затем файлы решения в алфавитном порядке.
Это означает, что ваш обычай app_offline.htm
Файл быстро (но не мгновенно) перезаписывает сгенерированный системой файл. Поэтому (некрасивая) система сгенерировала копию app_offline.htm
может быть отправлен на запросы в течение 1-2 секунд после начала публикации, прежде чем обновляться с помощью пользовательского файла.
Процесс публикации автоматически удаляет app_offline.htm
с удаленного сервера независимо от его содержания или происхождения.
Преимущество (по сравнению с заменой системной копии) состоит в том, что ваша собственная копия переносима, автоматически зависит от решения и работает с контролем исходного кода.
Я знаю, что этот вопрос старый, но я надеюсь, что это поможет другим справиться с этой проблемой.
Я использую свой собственный
app_offline.htm_
файл в решении, которое публикуется. Мой сценарий развертывания затем переименовывает его (удаляя завершающий _), чтобы сделать его активным.
Затем я могу запустить свои сценарии БД / сделать что угодно, затем переименовать файл, возвращающий сайт.
Исходное содержание app_offline.htm
действительно хранятся в загадочном месте (вероятно, жестко закодированы внутри одного из двоичных файлов), однако Visual Studio записывает содержимое в физический файл перед его загрузкой.
Если вы опубликовали хотя бы один раз, простой поиск в командной строке с помощью dir C:\app_offline.htm /s/a/b
должно появиться место, где записан временный файл. Это должно быть что-то вродеC:\Users\username\AppData\Roaming\Microsoft\VisualStudio\16.0_5fc0d832\app_offline.htm
. Я не уверен, что эта шестнадцатеричная строка в конце одинакова для каждой установки или пользователя.
Установка этого файла только для чтения действительно предотвращает перезапись содержимого Visual Studio, и изменения в этот файл фактически будут загружены во время публикации. Однако это вызывает внутреннюю ошибку, которая может со временем помешать загрузке.
В app_offline.htm
записывается перед событием после сборки, поэтому его просто нужно перезаписать, прежде чем Visual Studio начнет загрузку.
Более устойчивый подход - это сделать следующее:
1) Создайте кастом app_offline.htm
в вашем проекте. (Не в корневой папке вашего проекта, это помешает вам использовать F5 Start Debugging.)
2) Используйте событие post-build, чтобы скопировать пользовательскийapp_offline.htm
из папки проекта в промежуточную папку Visual Studio.
Командная строка события после сборки:
copy /y "$(ProjectDir)Resources\app_offline.htm"
"C:\Users\%username%\AppData\Roaming\Microsoft\VisualStudio\16.0_5fc0d832\app_offline.htm"
Эндрю волов ответ работает как шарм! хотя это зависит от того, какую визуальную студию вы используете.
C: \ Users \ USERNAME \ AppData \ Roaming \ Microsoft \ VisualStudio
каталог, в котором вы должны сначала приземлиться, выберите версию VS [ 8.0/9.0.....] и отредактируйте app_offile.htm
файл.
Вы можете использовать пакетный файл, который вызывает компилятор с информацией о текущем каталоге в качестве параметров... Затем он копирует app_offline.htm и копирует новый файл. Запустите его там, где находится источник.
Лично я использую программу, которая немного сложнее, чем пакет, а также проверяет хэш файлов, чтобы определить, нужно ли им обновление, создает zip-файл новых файлов и извлекает его на удаленный хост, а также исключает файлы, которые мы определяем, для модульного тестирования, когда переход от испытаний к производству. Я также объединил интеграцию SVN в свое решение, поэтому, когда вы публикуете для тестирования или производства, вы также можете использовать SVN. Программа хранится на сетевом диске и вызывается из пакетного файла на локальном ПК с информацией о текущем каталоге. Таким образом, разработчикам не нужно обновляться до нового установщика или app_offline, если происходят какие-либо изменения. Наконец, он удаляет app_offline.
Посетите http://msdn.microsoft.com/en-us/library/system.web.compilation(v=vs.80).aspx для получения дополнительной информации или http://msdn.microsoft.com/en-us/library/ms229863(v=vs.80).aspx если вы просто делаете быстрый пакет!
Кроме того, в посте, на который вы изначально ссылались, и я также подтвердил, что вы можете изменить его, но вы также измените его для других, используя функцию публикации. Вот почему вы получили ответ, которым были.
Для пользователей Visual Studio Express 2013 для Интернета этот файл находится по адресу C:\Users[пользователь]\AppData\Roaming\Microsoft\VWDExpress\12.0
Это можно изменить в соответствии с вашими потребностями.
Еще в 2006 году Скотт Гу сказал, что нет способа настроить файл, который VS генерирует при публикации.
Комментарий в оригинальной статье
Я тоже был бы заинтересован в решении этой проблемы, но я не смог найти что-то однозначное в Google.
Вы видели это?
Это может быть (не совсем) то, что вы хотите, но это решает проблему, я думаю.