Подтвердить что ты не робот

Прерывает ли приложение ASP.NET, если я перезаписываю библиотеки DLL?

Предположим, что мое приложение ASP.NET выполняет 4 отдельных обращения к базе данных. Если после второго вызова я перезаписываю библиотеки DLL в папке BIN, не останавливает ли приложение выполнение своей обработки, что приводит к сбою 3-го и 4-го вызовов базы данных?

Любые советы будут очень признательны, Мош

4b9b3361

Ответ 1

ASP.NET выполняет функцию теневого копирования на различные ресурсы, включая библиотеки DLL и файлы ResX. Когда к файлу обращается инфраструктура, он блокируется, предотвращая прямой доступ. Чтобы предотвратить блокировку файлов в корневом /bin или корневом /App * _Resources (например), он копирует эти ресурсы в предопределенный каталог.

[изменить]
В предопределенном каталоге по умолчанию используется значение

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Временные файлы ASP.NET\demo1\9b9144a7\8665ac07

где demo1 - это имя вашего приложения и вложенные каталоги, которые (я предполагаю) хэшируют против дружественного имени AppDomain для содержащихся ресурсов.

Например, у меня есть каталог с именем dbresourceproviderweb из примера поставщика ресурсов в MSDN, написанного Мишель Бустаманте. Внутри этого каталога есть две папки: c8b872e2 и 7fc33f08. Чтобы идти дальше, скомпилированные ресурсы для эквадорских испанцев находятся под... \dbresourceproviderweb\c8b872e2\97074f76\es-EC и...\dbresourceproviderweb\7fc33f08\ac65ebd3\es-EC
[/Edit]

Вы можете изменить этот каталог в Application_Start, как описано здесь: Событие AssemblyResolve не запускается во время компиляции динамической сборки для страницы aspx

Вы можете отключить теневое копирование в файле web.config:

<hostingEnvironment shadowCopyBinAssemblies="false" />

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

Дополнительные сведения о теневом копировании и приложениях см. в статье MSDN: http://msdn.microsoft.com/en-us/library/ms404279.aspx

Edit2: Я только что узнал, что вы можете изменить требуемый промежуток времени между операциями копирования файлов, чтобы создать AppDomain.

В элементе system.web/httpRuntime вы можете указать waitChangeNotification и maxWaitChangeNotification, чтобы новый AppDomain не был создан для каждого скопированного файла. См. MSDN.

Несмотря на то, что на MSDN нет примеров такого поведения, полезно сохранить ссылку на конфигурацию HttpRuntime.

Ответ 2

Агрегаты загружаются в домен приложения, а домен приложения просматривает каталог, если вы замените сборки, он будет перерабатывать приложение и перезагружать сборки. Итак, да, ваши 3-й/4-й звонки не удались.