发布时,网站DLL似乎间歇性地被锁定

时间:2017-09-27 18:08:54

标签: .net asp.net-core .net-core visual-studio-2017 webdeploy

我尝试通过VS2017中的Publish上下文菜单将我的.net核心站点部署到Azure,偶尔(大约1/3部署),我收到以下错误。

  

Web部署任务失败。 (Web Deploy无法修改该文件   'MyCoreWebSite.dll'在目的地上,因为它被一个锁定   外部过程。为了让发布操作成功,   您可能需要重新启动应用程序以释放锁定,   或者在下一个使用.Net应用程序的AppOffline规则处理程序   发布尝试。了解更多信息:   http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE。)

然后我会真的等一下,再试一次它会起作用。同时,我将运行handle实用程序寻找锁定DLL的任何东西,它永远找不到任何东西。

这是一个错误还是我错过了一些简单的东西?

1 个答案:

答案 0 :(得分:5)

ASP.NET核心不支持卷影复制文件,这意味着ASP.NET Core进程(Kestrel)将对这些文件保持锁定。你可以解决这个问题:

  1. 发布前提供app_offline.htm页面,然后将其删除。我认为在发布配置文件(<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>)中有自动支持。但是如果需要,您可以使用自定义部署脚本执行此操作。在ASP.NET Core 1.x中,我还要在Startup.cs文件中添加一个文件监视任务来关闭当前进程。我不知道ASP.NET Core 2.0是否仍然需要它。
  2. 1.的缺点是您的网站在发布期间将处于脱机状态。如果您不希望自己可以使用站点副本:将所有文件复制到子目录(例如\PREVIOUS),请更改web.config中的标记,使其指向.exe in新的子目录。现在,根目录中的所有锁都应该消失了......发布您的站点并在之后再次更改web.config。
  3. 如果您的网站负载均衡,您可以从池中取出一台服务器,更新它并在完成后将其添加回池中。