简体   繁体   English

使用MSdeploy.exe的WebDeploy无法同步GAC程序集,因为dll被另一个进程锁定

[英]WebDeploy with MSdeploy.exe fails to sync GAC Assembly because dll(s) locked by another process

I'm having this problem using msdeploy to sync GAC assembly to many Application Servers. 我在使用msdeploy将GAC程序集同步到许多应用程序服务器时遇到了这个问题。

When I run this command 当我运行此命令

msdeploy -verb:sync -source:gacAssembly="'MyAssembly'" -dest:gacAssembly,computername=DESTINATIONSERVER

I obtain this error: 我得到了这个错误:

*Microsoft.Web.Deployment.DeploymentException: (28/09/2010 16.46.37) An error occurred when the request was processed on the remote computer. * Microsoft.Web.Deployment.DeploymentException:(28/09/2010 16.46.37)在远程计算机上处​​理请求时发生错误。 ---> Microsoft.Web.Deployment.DeploymentClientServerException: An error was encountered when processing 'INPS.DNA.dll'. ---> Microsoft.Web.Deployment.DeploymentClientServerException:处理“ INPS.DNA.dll”时遇到错误。 ---> Microsoft.Web.Deployment.DeploymentException: The error code was 0x80070020. ---> Microsoft.Web.Deployment.DeploymentException:错误代码为0x80070020。 ---> System.IO.IOException: The process cannot access 'C:\\Windows\\assembly\\GAC_MSIL\\MYASSEMBLY\\1.0.0.0__a31fe99d2f98435c\\MYASSEMBLY.dll' because it is being used by another process. ---> System.IO.IOException:该进程无法访问“ C:\\ Windows \\ assembly \\ GAC_MSIL \\ MYASSEMBLY \\ 1.0.0.0__a31fe99d2f98435c \\ MYASSEMBLY.dll”,因为该进程正在被另一个进程使用。 at Microsoft.Web.Deployment.Win32Native.RaiseIOExceptionFromErrorCode(Win32ErrorCode errorCode, String maybeFullPath) at Microsoft.Web.Deployment.FileStreamEx.CreateInstance(String path, FileMode fileMode, FileAccess fileAccess) at Microsoft.Web.Deployment.FilePathProvider.Add(DeploymentObject source, Boolean whatIf) --- End of inner exception stack trace --- --- End of inner exception stack trace --- at Microsoft.Web.Deployment.DeploymentObject.Update(DeploymentObject source,DeploymentSyncContext syncContext) at Microsoft.Web.Deployment.DeploymentSyncContext.HandleUpdate(DeploymentObject destObject, DeploymentObject sourceObject) at Microsoft.Web.Deployment.DeploymentSyncContext.SyncDirPathChildren(DeploymentObject destRoot, DeploymentObject sourceRoot) at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenNoOrder(DeploymentObject dest, DeploymentObject source) at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest, DeploymentObject source) a 在Microsoft.Web.Deployment.FilePathProvider.Add(Microsoft.Web.Deployment.Win32Native.RaiseIOExceptionFromErrorCode(Win32ErrorCode errorCode,String mayFullPath)在Microsoft.Web.Deployment.FileStreamEx.CreateInstance(String path,FileMode fileMode,FileAccess fileAccess)在,布尔值whatIf)---内部异常堆栈跟踪的末尾--- ---内部异常堆栈跟踪的末尾--- Microsoft.Web.Microsoft.Web.Deployment.DeploymentObject.Update(DeploymentObject source,DeploymentSyncContext syncContext)。 Microsoft.Web.Deployment.DeploymentSyncContext.SyncDirPathChildren(Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenNoOrder(DeploymentObject dest,DeploymentObject源))上的Deployment.DeploymentSyncContext.HandleUpdate(DeploymentObject destObject,DeploymentObject sourceObject) .Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest,DeploymentObject源)a t Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(DeploymentObject destinationObject, DeploymentObject sourceObject) t Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(DeploymentObject destinationObject,DeploymentObject sourceObject)
at Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject, DeploymentSyncOptions syncOptions, PayloadTable payloadTable, Conten tRootTable contentRootTable) at Microsoft.Web.Deployment.DeploymentAgent.HandleSync(DeploymentAgentWorkerR equest workerRequest) --- End of inner exception stack trace --- at Microsoft.Web.Deployment.StatusThreadHandler.CheckForException() at Microsoft.Web.Deployment.AgentClientProvider.RemoteDestSync(DeploymentObje ct sourceObject, DeploymentSyncContext syncContext) at Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject, DeploymentSyncOptions syncOptions, PayloadTable payloadTable, Conten tRootTable contentRootTable) at Microsoft.Web.Deployment.DeploymentObject.SyncTo(DeploymentProviderOptions providerOptions, DeploymentBaseOptions baseOptions, DeploymentSyncOptions syncO ptions) at MSDeploy.MSDeploy.ExecuteWorker() Error count: 1.* Microsoft.Web.Deployment.DeploymentAgent.HandleSync(DeploymentAgentWorkerR equest workerRequest)上的Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject,DeploymentSyncOptions syncOptions,PayloadTablepayloadTable,Conten tRootTable contentRootTable)-内部异常堆栈跟踪的结尾- -在Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject,DeploymentSyncOptions syncOptions,PayloadTablepayloadTable,Microsoft.Web.Deployment.AgentClientProvider.RemoteDestSync(DeploymentObje ct sourceObject,DeploymentSyncContext syncContext)处,位于Microsoft.Web.Deployment.DeploymentObject.SyncTo(DeploymentProviderOptions providerOptions,DeploymentBaseOptions baseOptions,DeploymentSyncOptions syncO ptions)上的tRootTable contentRootTable),位于MSDeploy.MSDeploy.ExecuteWorker()的错误计数:1. *

If I execute IISRESET on DESTINATIONSERVER the error doesn't occur! 如果我在DESTINATIONSERVER上执行IISRESET ,则不会发生该错误!

My question is: 我的问题是:

It's possible to unlock DLL without perform an IISRESET command? 是否可以在不执行IISRESET命令的情况下解锁DLL?

I think I can avoid to restart entire Web Server. 我想我可以避免重新启动整个Web服务器。

Can you help me' 你能帮助我吗'

Thanks a lot! 非常感谢!

Best regards. 最好的祝福。

What about using the recyleApp provider to stop and start the app pool? 使用recyleApp提供程序停止和启动应用程序池该怎么办?

msdeploy.exe -verb:sync -source:recycleApp -dest:recycleApp="Default Web Site",recycleMode="StopAppPool",computerName=remote-computer

... do your real deployment ... ...进行真正的部署...

msdeploy.exe -verb:sync -source:recycleApp -dest:recycleApp="Default Web Site",recycleMode="StartAppPool",computerName=remote-computer

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM