bin/*.dll заблокирован при развертывании веб-сайта после того, как app_offline.htm скопирован и активен (теневое копирование отключено)
Я сталкиваюсь с проблемой развертывания веб-сайта. Теневая копия отключается после предыдущих проблем с ее развертыванием и развертыванием сайта.
В частности, во время развертывания я обнаружил, что даже после копирования app_offline.htm
и проверка того, что сайт / приложение находится в автономном режиме, файлы в bin/*.dll
часто заблокированы.
С теневой копией я все еще ожидал бы, что блокировки на dll будут свободны, когда appdomain
выгружен на app_offline.htm
внешний вид.
Я пытался развернуть временный web.config
найти на Stack Overflow
которая направлена на предотвращение изменений (в bin/
) сразу же перед попыткой удалить содержимое bin/
Я даже делаю паузу для 10s
после копирования нового web.config
,
?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<httpRuntime waitChangeNotification="300"
maxWaitChangeNotification="300"/>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>
С помощью утилит я подтвердил, что мой пул приложений (w3wp.exe
process) является держателем блокировки на dll, поэтому я предполагаю, что это причина, по которой я не могу удалить / перезаписать файлы. Если я вручную утилизирую пул приложений, это освобождает его, и я могу развернуть его очень хорошо. К сожалению, в рамках процесса развертывания возможно копирование app_offline и изменение web.config, но выполнение IIS
appcmd не перерабатывает (из-за разрешений / по причинам групповой политики), поэтому мне действительно нужно иметь возможность освободить эту блокировку только app_offline.htm
и web.config.
Повторное включение теневого копирования "решает" эту конкретную проблему, но если блокировка все еще удерживается на dll. Однако мне интересно / и беспокоит, просто ли я откладываю проблему. Если замок на старой DLL не будет свободным, когда appdomain
снова загружен?
При копировании app_offline.htm
w3wp
Идентификатор процесса не меняется, как это происходит с жестким перезапуском, но я предполагаю, что он выгружает appdomain
который должен освободить bin/ files
он заблокирован.
Еще один интересный момент заключается в том, что это происходит только на наших производственных серверах, я не могу воссоздать его локально или на наших сайтах разработчиков / промежуточных сайтов. Я не верю, что есть какая-либо разница в конфигурации с app_pools
или же IIS
Конфиг, но это может вызвать такое поведение.
Также чтобы уточнить shadowCopyBinAssemblies
было установлено значение false более 3 лет без возникновения этой проблемы (тот же процесс развертывания), поэтому я действительно чувствую, что что-то, что произошло недавно, вызвало это, но я понятия не имею, что.
Спасибо за любые идеи о том, как решить эту проблему или даже что может быть причиной этого.
(Я считаю, что сервер IIS7
или же 7.5
)
1 ответ
Я сталкиваюсь с подобной проблемой, когда DLL блокируется IIS даже при наличии app_offline.htm.
Перезапуск пула решает проблему, но это происходит вручную. Ищем автоматизированный способ. В моем случае DLL это PDFium.dll это скорее всего неуправляемая DLL