我尝试通过 VS2017 中的“发布”上下文菜单将我的 .net core 站点部署到 Azure,偶尔(大约三分之一的部署)我会收到以下错误。
Web 部署任务失败。 (Web Deploy无法修改该文件
目标上的“MyCoreWebSite.dll”,因为它被锁定
外部过程。为了让发布操作成功,
您可能需要重新启动应用程序才能释放锁定,
或者在您的下一个 .Net 应用程序中使用 AppOffline 规则处理程序
发布尝试。了解更多信息:http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE.)
然后我会等一下,再试一次,它就会起作用。同时,我将运行handle实用程序正在寻找锁定 DLL 的任何内容,但从未找到任何内容。
这是一个错误还是我错过了一些简单的事情?
ASP.NET 核心确实不支持卷影复制文件,这意味着 ASP.NET Core 进程 (Kestrel) 将保持对这些文件的锁定。您可以解决这个问题:
- 提供一个
app_offline.htm
发布前的页面并在发布后将其删除。我认为发布配置文件中有对此的自动支持(<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
)。但如果需要,您可以使用自定义部署脚本来完成此操作。在 ASP.NET Core 1.x 中,我还必须在 Startup.cs 文件中添加一个文件监视任务来关闭当前进程。我不知道ASP.NET Core 2.0是否还需要它。
- 1. 的缺点是您的网站在发布期间将处于离线状态。如果您不希望使用站点的副本:将所有文件复制到子目录(例如
\PREVIOUS
),更改 web.config 中的标记,使其指向新子目录中的 .exe。现在根目录中的所有锁都应该消失了...发布您的站点并随后再次更改 web.config。
- 如果您的网站是负载平衡的,您当然可以从池中取出一台服务器,更新它并在完成后将其添加回池中。
更多信息
https://devblogs.microsoft.com/dotnet/web-publishing-updates-for-app-offline-and-usechecksum/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)