在app_offline.htm复制并激活(阴影副本关闭)后部署网站时锁定bin / * .dll

时间:2013-07-01 13:25:51

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

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

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

关闭阴影副本后,我仍然希望在appdomain外观上卸载app_offline.htm时,dll上的锁定是免费的。

我尝试在web.config上部署一个临时Stack Overflow,旨在防止在我尝试删除{{1}的内容之前立即获取更改(bin/) }} 复制新的bin/后,我甚至暂停10s

web.config

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

重新打开卷影副本确实“解决”了这个特殊问题,但是如果锁定仍然在dll上。但我不知道/并担心我是否只是推迟了这个问题。除非再次加载app_offline.htm时对旧dll的锁定是免费的吗?

复制appdomain时,app_offline.htm进程ID不会像硬回收那样改变,但我认为它正在卸载应该释放w3wp的{​​{1}}它已经锁定了。

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

另外澄清app_pools已被设置为假3年以上没有发生此问题(相同的部署过程)所以我真的觉得最近发生的事情导致了这一点,但我不知道是什么。

感谢有关如何解决此问题的任何想法,甚至可能导致问题的原因。

(我相信服务器是IISshadowCopyBinAssemblies

1 个答案:

答案 0 :(得分:-2)

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