我遇到了部署网站的问题。在之前的部署问题和部署站点之后,将关闭卷影副本。
特别是在部署时,我发现即使在复制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}}它已经锁定了。
另一个有趣的观点是,这似乎只发生在我们的生产服务器上,我无法在本地或我们的开发/临时站点上重新创建它。我不相信appdomain
或bin/ files
配置有任何配置差异,但这可能导致此行为。
另外澄清app_pools
已被设置为假3年以上没有发生此问题(相同的部署过程)所以我真的觉得最近发生的事情导致了这一点,但我不知道是什么。
感谢有关如何解决此问题的任何想法,甚至可能导致问题的原因。
(我相信服务器是IIS
或shadowCopyBinAssemblies
)
答案 0 :(得分:-2)
我遇到了类似的问题,即使存在app_offline.htm,DLL仍被IIS锁定。
重新启动池可以解决问题,但这是手动的。寻找一种自动化的方式。在我的情况下,DLL是PDFium.dll,很可能是非托管DLL