Горячее развертывание блоков .NET

Смотрите на Regex. Замена .

7
задан Kim Major 7 December 2009 в 19:25
поделиться

3 ответа

Возможно, вам лучше всего будет иметь отдельную службу.

Вы могли бы потенциально сделать это в одной службе. Однако "трюк", который потребовался бы для самообновления службы, немного сложно реализовать.

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

Позже, когда вы захотите выполнить обновление (которое может запускаться через любое событие, которое может получить служба, включая копирование новых сборок в папку обновлений [через FileSystemWatcher], явно сообщая об этом через сеть и т. д.]), необходимо будет активировать способ сообщить типу внутреннего AppDomain остановиться, затем выгрузите домен приложения . На этом этапе он может выполнить шаги 3 и 4 выше. Затем нужно просто перезагрузить AppDomain, повторно запустить его инициализацию и т. Д.

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

Единственное требование, которое здесь усложняет, состоит в том, что вы должны убедиться, что не передаете какие-либо типы в основной AppDomain из созданного, иначе вы загрузите сборки в свой основной домен приложений. Это помешает вам обновить их во время выполнения.

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

Единственное требование, которое усложняет задачу, это то, что вы должны убедиться, что не передаете в основной AppDomain какие-либо типы из созданного, иначе вы загрузите сборки в свой основной домен приложений. Это помешает вам обновить их во время выполнения.

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

Единственное требование, которое здесь усложняет, состоит в том, что вы должны убедиться, что не передаете какие-либо типы в основной AppDomain из созданного, иначе вы загрузите сборки в свой основной домен приложений. Это помешает вам обновить их во время выполнения.

Загрузите сборки в ваш основной домен приложений. Это помешает вам обновить их во время выполнения.

Загрузите сборки в ваш основной домен приложений. Это помешает вам обновить их во время выполнения.

5
ответ дан 7 December 2019 в 05:24
поделиться

На нашем сервере сборки мы используем сценарий PowerShell для удаленной остановки службы, копирования нового файла и перезапуска службы.

2
ответ дан 7 December 2019 в 05:24
поделиться

Я бы посмотрел на Castle Windsor как на хороший вариант для сборок «горячего подключения».

Это продвинутая и хорошо поддерживаемая инфраструктура IoC / DI, которая помогает со многими из упомянутых вами задач, за исключением фактического перемещения файлов на целевую машину. Однако о самой сантехнике позаботятся с помощью CW.

1
ответ дан 7 December 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: