Обеспечить возможность «горячей замены» / изменения сборок во время выполнения без перезапуска процесса - PullRequest
5 голосов
/ 18 октября 2010

ASP.Net позволяет копировать новые сборки в каталог bin приложения без необходимости перезапуска каких-либо служб или процессов.

У меня есть приложение, которое загружает пользовательские плагины и расширения (некоторые из них основаны на COM) - я хотел бы предоставить аналогичную функциональность (то есть возможность изменять / обновлять сборку без необходимости перезапуска процесса).В настоящее время сборка блокируется до тех пор, пока процесс не будет остановлен.

Как ASP.Net управляет этим?

1 Ответ

3 голосов
/ 28 мая 2013

ASP.Net достигает этого с помощью «теневого копирования».См. Здесь: Теневое копирование MSDN

В основном сборки копируются в другую папку ASP.Net, из которой они загружаются в домен приложения.Именно эта скопированная версия сборки заблокирована процессом, оставив исходный файл сборки (в папке Bin) разблокированным.Затем домен приложения настраивается для отслеживания изменений в исходной сборке, и в случае обнаружения обновления создается новый домен приложения и в него загружается новая сборка.

На этом этапе ASP.Net направляет любые будущие запросы к веб-приложению в новый домен приложений, в то время как старый домен приложений сохраняется, чтобы продолжать обслуживать любые выполняющиеся в данный момент запросы вплоть до завершения.Когда ASP.Net определяет, что старый домен приложения больше не обрабатывает какие-либо запросы, он выгружается и «горячая замена» завершена.

Из вашего краткого описания, хотя я бы рекомендовал изучить Microsoft MEF .MEF - это фреймворк, предназначенный для создания архитектуры плагинов, которую вы описываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...