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

Другие вопросы по тегам