【问题标题】:bin/*.dll locked when deploying website after app_offline.htm copied and active (shadow copy off)在 app_offline.htm 复制并激活后部署网站时 bin/*.dll 被锁定(卷影复制关闭)
【发布时间】:2013-06-28 15:21:47
【问题描述】:

我在部署网站时遇到了问题。卷影副本在之前的部署问题和部署站点后被关闭。

特别是在部署时,我发现即使在复制app_offline.htm 并验证站点/应用程序处于脱机状态后,bin/*.dll 中的文件也经常被锁定。

关闭卷影复制后,我仍然希望当appdomainapp_offline.htm 外观上卸载时,dll 上的锁将被释放。

我已尝试部署在Stack Overflow 上找到的临时web.config,其目的是防止在我尝试删除bin/ 的内容之前立即获取更改(对bin/) 我什至在复制新的web.config 后暂停10s

?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 进程)是 dll 上的锁持有者,因此我假设这就是我无法删除/覆盖文件的原因。如果我手动回收应用程序池,它会释放它并且我能够很好地部署。不幸的是,作为部署过程的一部分,复制 app_offline 和更改 web.config 是可能的,但执行 IIS appcmd 回收不是(出于权限/组策略原因)所以我真的需要能够释放这个锁只用 @ 987654334@ 和 web.config。

重新打开卷影复制确实“解决”了这个特定问题,但如果 dll 上仍持有锁。但是,我想知道/并担心我是否只是推迟了问题。除非再次加载 appdomain 时释放旧 dll 上的锁?

复制 app_offline.htm 时,w3wp 进程 ID 不会像硬回收那样发生变化,但我认为它正在卸载 appdomain,这应该会释放已锁定的 bin/ files

另一个有趣的点是,这似乎只发生在我们的生产服务器上,我无法在本地或我们的开发/登台站点上重新创建它。我不相信 app_poolsIIS 配置有任何配置差异,但这可能会导致这种行为。

还要澄清shadowCopyBinAssemblies 已设置为 false 超过 3 年没有发生此问题(相同的部署过程)所以我真的觉得最近发生的事情导致了这个,但我不知道是什么。

感谢您提供有关如何解决此问题甚至可能导致此问题的任何想法。

(我相信服务器是IIS77.5

【问题讨论】:

  • 这是一个老问题,但你能解决这个问题吗?我们有一个非常相似的问题。如果是这样,您应该在此处发布解决方案作为答案。谢谢!
  • 任何想法,我们有同样的问题,你能分享解决方案吗?谢谢。

标签: deployment app-offline.htm shadow-copy


【解决方案1】:

我遇到了类似的问题,即使存在 app_offline.htm,DLL 也会被 IIS 锁定。
重新启动池可以解决问题,但它是手动的。寻找一种自动化的方式。在我的情况下,DLL 是 PDFium.dll,它可能是一个非托管 dll

【讨论】:

  • 这并没有真正提出问题的答案。如果您有扩展要求,您可以提出自己的问题。但是答案部分不适合这个。
猜你喜欢
  • 2014-08-30
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
相关资源
最近更新 更多