Вопрос

я смог прочитать только то, что ASP.NET обнаруживает изменения в определенных файлах, таких как aspx-файлы, библиотеки DLL и другие.Он перезапустит себя, завершит текущие запущенные запросы и новые запросы с новыми развернутыми файлами.

Но что происходит за время с момента копирования первого файла до замены последнего?Если я обменяю первый файл DLL, то придет запрос, но другие файлы DLL находятся в более старой версии - это просто приведет к сбою?Будет ли asp.net ждать несколько секунд и запустится заново только через X секунд отсутствия (соответствующих) изменений файла?

Спасибо!

Это было полезно?

Решение

Здесь у вас есть 4 вопроса:Что происходит за время с момента копирования первого файла до замены последнего? - Существует установленное время, пока .net ожидает, были ли изменены какие-либо другие файлы, прежде чем запускать новый домен приложения с загруженной новой библиотекой DLL.

Если я обменяю первый файл DLL, то придет запрос, но другие файлы DLL находятся в более старой версии - это просто приведет к сбою? - Это зависит от того, какие изменения кода внесены в библиотеку dll.Если новая библиотека dll может нормально работать со старым кодом, то все будет в порядке.Но если домен приложения запускает новую библиотеку DLL, и эта новая библиотека dll зависит от чего-то, чего еще нет...тогда да, это вызовет исключение.

Будет ли asp.net ждать несколько секунд и запустится заново только через X секунд отсутствия (соответствующих) изменений файла? - Да.Я не смог определить, сколько времени прошло.Но, по моему личному опыту, это где-то в диапазоне 1-2 секунд.

Я также нашел хорошее объяснение здесь, в домене приложения, и повторной загрузке DLL:http://odetocode.com/Articles/305.aspx

Если вы копируете обновленную библиотеку DLL в подкаталог приложения bin, ASP.NET среда выполнения распознает наличие нового кода для выполнения.Поскольку ASP.NET не удается поменять DLL-файл на существующий AppDomain, запускается новый AppDomain.Старый домен приложения “отключен остановлен”, то есть существующим запросам разрешено завершить выполнение, и как только все они будут завершены, AppDomain может быть выгружен.Новый AppDomain начинается с нового кода и начинает принимать все новые запросы.

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

Среда выполнения инициализируется ASP.NET с включенным Теневым копированием для каталога bin .AppDomain скопирует любую нужную ему библиотеку DLL из каталога bin во временное местоположение перед блокировкой и загрузкой библиотеки DLL в память.Теневое копирование позволяет нам перезаписать любую библиотеку DLL в каталоге bin во время обновления, не переводя веб приложение в автономный режим.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top