4

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

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

关闭卷影副本后,我仍然希望在外观appdomain卸载时释放 dll 上的锁。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>

我已经用handles util确认我的应用程序池(w3wp.exe进程)是dll锁的持有者,所以我假设这是我无法删除/覆盖文件的原因。如果我手动回收应用程序池,它会释放它并且我能够很好地部署。不幸的是,作为部署过程的一部分,复制 app_offline 和更改 web.config 是可能的,但执行IISappcmd 回收不是(出于权限/组策略原因),所以我真的需要能够通过app_offline.htmweb 来释放这个锁。配置。

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

复制进程ID时不会像硬回收那样改变,但我认为它正在卸载应该释放它已锁定app_offline.htm的进程。w3wpappdomainbin/ files

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

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

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

(我相信服务器是IIS77.5

4

1 回答 1

-2

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

于 2018-11-21T16:37:08.037 回答