【问题标题】:WebDeploy with MSdeploy.exe fails to sync GAC Assembly because dll(s) locked by another process带有 MSdeploy.exe 的 WebDeploy 无法同步 GAC 程序集,因为 dll 被另一个进程锁定
【发布时间】:2010-10-01 04:53:20
【问题描述】:

我在使用 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 错误代码,字符串可能全路径) 在 Microsoft.Web.Deployment.FileStreamEx.CreateInstance(字符串路径、文件模式文件模式、文件访问文件访问) 在 Microsoft.Web.Deployment.FilePathProvider.Add(DeploymentObject 源,布尔假设) --- 内部异常堆栈跟踪结束 --- --- 内部异常堆栈跟踪结束 --- 在 Microsoft.Web.Deployment.DeploymentObject.Update(DeploymentObject 源,DeploymentSyncContext 同步上下文) 在 Microsoft.Web.Deployment.DeploymentSyncContext.HandleUpdate(DeploymentObject destObject,DeploymentObject sourceObject) 在 Microsoft.Web.Deployment.DeploymentSyncContext.SyncDirPathChildren(DeploymentObject destRoot,DeploymentObject sourceRoot) 在 Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenNoOrder(DeploymentObject 目标,DeploymentObject 源) 在 Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject 目标,DeploymentObject 源) 在 Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(部署对象目标对象,部署对象源对象)
在 Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject, DeploymentSyncOptions syncOptions, PayloadTable payloadTable, Conten tRootTable contentRootTable) 在 Microsoft.Web.Deployment.DeploymentAgent.HandleSync(DeploymentAgentWorkerR equest workerRequest) --- 内部异常堆栈跟踪结束 --- 在 Microsoft.Web.Deployment.StatusThreadHandler.CheckForException() 在 Microsoft.Web.Deployment.AgentClientProvider.RemoteDestSync(DeploymentObje ct sourceObject, DeploymentSyncContext syncContext) 在 Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject, DeploymentSyncOptions syncOptions, PayloadTable payloadTable, Conten tRootTable contentRootTable) 在 Microsoft.Web.Deployment.DeploymentObject.SyncTo(DeploymentProviderOptions providerOptions、DeploymentBaseOptions baseOptions、DeploymentSyncOptions syncO 选项) 在 MSDeploy.MSDeploy.ExecuteWorker() 错误计数:1.*

如果我在 DESTINATIONSERVER 上执行 IISRESET,则不会发生错误!

我的问题是:

是否可以在不执行 IISRESET 命令的情况下解锁 DLL?

我想我可以避免重新启动整个 Web 服务器。

你能帮帮我吗?

非常感谢!

最好的问候。

【问题讨论】:

    标签: gac msdeploy webdeploy 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

    【讨论】:

      猜你喜欢
      • 2013-09-09
      • 2012-06-28
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      相关资源
      最近更新 更多