2016-12-14 2 views
8

У нас есть сайт ASP.NET Core, работающий на нашем тестовом сервере, который мы хотели бы автоматически развернуть XCopy на наш веб-сервер IIS, так как мы делаем наши текущие приложения, где у меня уже есть сайт. Я добавил опубликованный профиль, который упаковывает сайт в локатор «publish-local» в рамках решения. Всякий раз, когда я пытаюсь скопировать поверх существующего сайта, все библиотеки DLL используются другим процессом, предположительно Kestrel, поэтому я вынужден разворачиваться в директорию для сиблинга и перегруппировать IIS, чтобы посмотреть на брата. Как обновить запущенный сайт ASP.NET Core без необходимости вручную вмешиваться и останавливать веб-серверы Kestrel или IIS?Как я могу обновить приложение ASP.NET Core поверх существующего/запущенного сайта без остановки веб-сервера?

ответ

1

немного чит мы используем, чтобы сначала переименовать старые файлы (что-то вроде my.dll.old), а затем скопировать новые DLL. Затем вы можете либо принудительно, либо дождаться перезапуска пула приложений.

+1

Я пытаюсь скопировать копирование на веб-сервер, используя MSBUILD и TeamCity. Не блокирует ли Kestrel переименование? – flipdoubt

+0

Если файлы используются, они, безусловно, не разрешают переименование. – QuietSeditionist

+1

Вы можете переименовать файл, который используется на самом деле. – Pawel

2

При работе с IIS вы можете удалить файл с именем app_offline.htm (с учетом регистра) в папку вашего приложения. IIS остановит ваше приложение и будет обслуживать содержимое файла app_offline.html. Теперь вы можете скопировать свое приложение. После завершения удаления app_offline.html и IIS запустит ваше приложение. Это описано в docs, а также в my post при запуске приложений Asp.NET Core с IIS.

+0

Даже с app_offline.htm, вашwebsite.exe все еще используется, и вы не можете скопировать новую версию. С app_offline.htm и пулом пула приложений _then_ похоже, что вы можете скопировать файл yourwebsite.exe, но просто поставить app_offline.htm недостаточно. –

+0

Мое понимание заключается в том, что достаточно положить app_offline.html. IIS пытается прекратить ваше приложение изящно, поэтому, если есть ожидающие запросы, остановка процесса приложения может быть не непосредственной. Если вы не видите, что приложение остановлено после простого добавления app_offline.html, я предлагаю открыть проблему в этом репо: https://github.com/aspnet/AspNetCoreModule – Pawel

+1

Я бы подумал, что это так, но это проблема, прямо сейчас. В моей сборке TFS у меня есть сценарий powershell, который помещается в app_offline.htm, он ждет несколько секунд, он отправляет запрос в IIS и возвращает 503 ошибку, показывающую, что приложение отключено ... но mywebsite.exe _still_ заблокирован для редактирование и публикация в dotnet не удается. :(Я предполагаю, что я отправлю вопрос на репо, которое вы предложили, потому что я согласен - app_offline.htm должно быть достаточно хорошим. –

Смежные вопросы