我在部署网站时遇到问题。卷影副本在之前的部署问题和部署站点后被关闭。
特别是在部署时,我发现即使在复制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 是可能的,但执行IIS
appcmd 回收不是(出于权限/组策略原因),所以我真的需要能够通过app_offline.htm
web 来释放这个锁。配置。
重新打开卷影副本确实“解决”了这个特定问题,但如果仍然在 dll 上持有锁。但是,我想知道/并担心我是否只是推迟了问题。除非旧 dll 上的锁在appdomain
再次加载时被释放?
复制进程ID时不会像硬回收那样改变,但我认为它正在卸载应该释放它已锁定app_offline.htm
的进程。w3wp
appdomain
bin/ files
另一个有趣的点是,这似乎只发生在我们的生产服务器上,我无法在本地或我们的开发/登台站点上重新创建它。我不相信app_pools
orIIS
配置有任何配置差异,但这可能会导致这种行为。
另外要澄清shadowCopyBinAssemblies
的是,已经设置为 false 超过 3 年没有发生这个问题(相同的部署过程)所以我真的觉得最近发生的事情导致了这个,但我不知道是什么。
感谢您提供有关如何解决此问题甚至可能导致此问题的任何想法。
(我相信服务器是IIS7
或7.5
)