WebDeploy с MSdeploy.exe не может синхронизировать сборку GAC, потому что dll заблокированы другим процессом
У меня возникла эта проблема при использовании msdeploy для синхронизации сборки GAC со многими серверами приложений.
Когда я запускаю эту команду
msdeploy -verb:sync -source:gacAssembly="'MyAssembly'" -dest:gacAssembly,computername=DESTINATIONSERVER
Я получаю эту ошибку:
* Microsoft.Web.Deployment.DeploymentException: (28.09.2010 16.46.37) Произошла ошибка при обработке запроса на удаленном компьютере.
---> Microsoft.Web.Deployment.DeploymentClientServerException: при обработке 'INPS.DNA.dll' обнаружена ошибка.
---> Microsoft.Web.Deployment.DeploymentException: код ошибки был 0x80070020.
---> System.IO.IOException: процесс не может получить доступ к "C:\Windows\assembly\GAC_MSIL\MYASSEMBLY\1.0.0.0__a31fe99d2f98435c\MYASSEMBLY.dll", поскольку он используется другим процессом. в Microsoft.Web.Deployment.Win32Native.RaiseIOExceptionFromErrorCode(Win32ErrorCode errorCode, String MaybeFullPath) в Microsoft.Web.Deployment.FileStreamEx.CreateInstance(строковый путь, FileMode fileMode, FileAccess fileAccess)., Boolean whatIf)
--- Конец трассировки стека внутренних исключений ---
--- Конец трассировки стека внутренних исключений --- в Microsoft.Web.Deployment.DeploymentObject.Update(источник DeploymentObject,DeploymentSyncContext syncContext) в Microsoft.Web.Deployment.DeploymentSyncContext.HandleUpdate(DeploymentObject destObject, DeploymentObject sourceObject) в Microsoft.Web.Deployment.DeploymentSyncContext.SyncDirPathChildren(DeploymentObject destRoot, DeploymentObject sourceRoOppjectObjectObject.ObObObDeObObDeObDOEbDOEBDOEBOWREDDOBEWORCWDEWEBDWORCWDEBDEWEBDEUBE.Deployment.DeploymentSyncContext.SyncChildrenOrder (DeploymentObject dest, источник DeploymentObject) a t Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync (DeploymentObject destinationObject, DeploymentObject sourceObject)
в Microsoft.Web.Deployment.DeploymentObject.SyncToInternal (DeploymentObject destObject, DeploymentSyncOptions syncOptions, PayloadTable payloadTable, Conten tRootTable contentRootTable) в Microsoft.Web.Deployment.DeploymentAgent.HandleServiceRecureRquisionRecureQuentWorker - в Microsoft.Web.Deployment.StatusThreadHandler.CheckForException () в Microsoft.Web.Deployment.AgentClientProvider.RemoteDestSync (DeploymentObje ct sourceObject,DeploymentSyncContext syncContext) в Microsoft.Web.DeploymentObload PayOgnloadObjectObjectSecjectObjectSecjectObjectSyncjectSecjectObjectSecjectObjectSecjectObjectSecjectObjectSecjectObjectSecjectObjectSecjectObjectSecjectObjectSjectSecjectSject, Содержит tRootTable contentRootTable) в Microsoft.Web.Deployment.DeploymentObject.SyncTo (DeploymentProviderOptions providerOptions, DeploymentBaseOptions baseOptions, DeploymentSyncOptions syncO ptions) в MSDeploy.MSDeploy.ExecuteWorker () Количество ошибок: 1. *
Если я выполню IISRESET на DESTINATIONSERVER, ошибка не произойдет!
Мой вопрос:
Можно ли разблокировать DLL без выполнения команды IISRESET?
Я думаю, что могу избежать перезапуска всего веб-сервера.
Вы можете мне помочь'
Большое спасибо!
С наилучшими пожеланиями.
1 ответ
Как насчет использования поставщика recyleApp для остановки и запуска пула приложений?
msdeploy.exe -verb:sync -source:recycleApp -dest:recycleApp="Default Web Site",recycleMode="StopAppPool",computerName=remote-computer
... сделать ваше реальное развертывание...
msdeploy.exe -verb:sync -source:recycleApp -dest:recycleApp="Default Web Site",recycleMode="StartAppPool",computerName=remote-computer