【发布时间】:2013-06-28 15:21:47
【问题描述】:
我在部署网站时遇到了问题。卷影副本在之前的部署问题和部署站点后被关闭。
特别是在部署时,我发现即使在复制app_offline.htm 并验证站点/应用程序处于脱机状态后,bin/*.dll 中的文件也经常被锁定。
关闭卷影复制后,我仍然希望当appdomain 在app_offline.htm 外观上卸载时,dll 上的锁将被释放。
我已尝试部署在Stack Overflow 上找到的临时web.config,其目的是防止在我尝试删除bin/ 的内容之前立即获取更改(对bin/)
我什至在复制新的web.config 后暂停10s。
?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>
我已通过句柄实用程序确认我的应用程序池(w3wp.exe 进程)是 dll 上的锁持有者,因此我假设这就是我无法删除/覆盖文件的原因。如果我手动回收应用程序池,它会释放它并且我能够很好地部署。不幸的是,作为部署过程的一部分,复制 app_offline 和更改 web.config 是可能的,但执行 IIS appcmd 回收不是(出于权限/组策略原因)所以我真的需要能够释放这个锁只用 @ 987654334@ 和 web.config。
重新打开卷影复制确实“解决”了这个特定问题,但如果 dll 上仍持有锁。但是,我想知道/并担心我是否只是推迟了问题。除非再次加载 appdomain 时释放旧 dll 上的锁?
复制 app_offline.htm 时,w3wp 进程 ID 不会像硬回收那样发生变化,但我认为它正在卸载 appdomain,这应该会释放已锁定的 bin/ files。
另一个有趣的点是,这似乎只发生在我们的生产服务器上,我无法在本地或我们的开发/登台站点上重新创建它。我不相信 app_pools 或 IIS 配置有任何配置差异,但这可能会导致这种行为。
还要澄清shadowCopyBinAssemblies 已设置为 false 超过 3 年没有发生此问题(相同的部署过程)所以我真的觉得最近发生的事情导致了这个,但我不知道是什么。
感谢您提供有关如何解决此问题甚至可能导致此问题的任何想法。
(我相信服务器是IIS7或7.5)
【问题讨论】:
-
这是一个老问题,但你能解决这个问题吗?我们有一个非常相似的问题。如果是这样,您应该在此处发布解决方案作为答案。谢谢!
-
任何想法,我们有同样的问题,你能分享解决方案吗?谢谢。
标签: deployment app-offline.htm shadow-copy