Самообновление / теневое копирование с помощью Asp.Net сердечник
Я пишу a Asp.Net основное приложение, которое должно иметь возможность обновлять себя (заменять свои собственные двоичные файлы во время работы).
Эта статья MSDN описывает теневое копирование с помощью классической платформы .Net framework, что было бы именно тем, что мне нужно. Но вся вещь AppDomain отсутствует в .Net Core.
Итак, мои вопросы:
- существует ли альтернативный способ в .Net Core включить теневое копирование сборок?
- существуют ли другие механизмы в .Net Ядро, позволяющее построить самообновляющееся приложение?
3 ответа:
Поскольку в .NET Core нет встроенного механизма для этого, я в конечном итоге реализовал свое собственное пользовательское решение. Это работает примерно так:
- запущенное приложение загружает и извлекает новые двоичные файлы в новую папку.
- запущенное приложение запускает небольшой процесс обновления. Следующие параметры передаются процессу обновления через командную строку:
- идентификатор процесса запущенного приложения
- двоичный путь бега применение
- Путь загруженных двоичных файлов
- запущенное приложение завершает работу само.
- Процесс обновления ожидает выхода запущенного приложения (используя идентификатор процесса) или принудительно убивает запущенное приложение, если оно не выходит само по себе в течение заданного времени ожидания.
- Процесс обновления удаляет существующие двоичные файлы и копирует новые загруженные двоичные файлы.
- Процесс обновления запускает новую версию основного приложение.
Убедитесь, что вы делаете как можно больше в главном приложении (загрузка, распаковка, проверка,...) и максимально упростить процесс обновления (свести к минимуму риск сбоя).
Этот подход оказался достаточно устойчивым.
.Net API Browser указывает, что свойство, необходимое для настройки этого в .Net Core, но AppDomainSetup-нет.
Чтобы было понятно, AppDomain был добавлен в .Net Standard 2.0, но создание домена в настоящее время не поддерживается