我在部署网站时遇到问题。卷影副本在之前的部署问题和部署站点后关闭。
特别是在部署时,我发现即使复制了 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.config。重新打开卷影副本确实“解决”了这个特定问题,但如果 dll 上仍然持有锁。但是,我想知道/并担心我是否只是推迟了问题。除非在
appdomain
时释放旧 dll 上的锁。又加载了?复制时
app_offline.htm
w3wp
进程 ID 不会像硬回收那样改变,但我认为它正在卸载 appdomain
这应该释放 bin/ files
它已锁定。另一个有趣的一点是,这似乎只发生在我们的生产服务器上,我无法在本地或我们的开发/临时站点上重新创建它。我不认为
app_pools
有任何配置差异或 IIS
config 但这可能会导致这种行为。还要澄清
shadowCopyBinAssemblies
已经设置为 false 超过 3 年没有发生这个问题(相同的部署过程)所以我真的觉得最近发生的事情导致了这个,但我不知道是什么。感谢您提供有关如何解决此问题甚至可能导致此问题的任何想法。
(我相信服务器是
IIS7
或 7.5
)
最佳答案
我遇到了一个类似的问题,即使存在 app_offline.htm,IIS 也锁定了 DLL。
重新启动池解决了问题,但它是手动的。寻找一种自动化的方式。在我的情况下,DLL 是 PDFium.dll,它可能是一个非托管的 dll
关于deployment - 在 app_offline.htm 复制并激活后部署网站时 bin/*.dll 被锁定(影子复制关闭),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17405588/