deployment - 在 app_offline.htm 复制并激活后部署网站时 bin/*.dll 被锁定(影子复制关闭)

标签 deployment app-offline.htm shadow-copy

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

特别是在部署时,我发现即使复制了 app_offline.htm并验证站点/应用程序是否脱机,bin/*.dll 中的文件经常被锁。

关闭影子副本后,我仍然希望在 appdomain 时释放 dll 上的锁。已卸载 app_offline.htm外貌。

我试过部署一个临时的 web.configStack 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 年没有发生这个问题(相同的部署过程)所以我真的觉得最近发生的事情导致了这个,但我不知道是什么。

感谢您提供有关如何解决此问题甚至可能导致此问题的任何想法。

(我相信服务器是 IIS77.5 )

最佳答案

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

关于deployment - 在 app_offline.htm 复制并激活后部署网站时 bin/*.dll 被锁定(影子复制关闭),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17405588/

相关文章:

java - 使用 weblogic 部署计划更新 JAR 中的 xml 文件

asp.net - 发布期间的自定义app_offline.htm文件

webdeploy - 将 app_offline 与 webdeploy 结合使用的最佳实践

c# - MEF 和 ShadowCopying DLL,以便我可以在运行时覆盖它们

deployment - 使用 WLST 远程上传

windows - 是否可以通过 Citrix 客户端建立 SSH 隧道?

javascript - 支持已失效的 javascript 部署后

javascript - WebSQL 被弃用后,如何与 HTML5 离线应用相处?

c# - 使用 NUnit 进行单元测试时获得所需/正确的装配路径