.net 发布时,站点DLL似乎间歇性锁定

.net 发布时,站点DLL似乎间歇性锁定,.net,asp.net-core,.net-core,visual-studio-2017,webdeploy,.net,Asp.net Core,.net Core,Visual Studio 2017,Webdeploy,我尝试通过VS2017中的发布上下文菜单将我的.net核心站点部署到Azure,偶尔(大约三分之一的部署)会出现以下错误 Web部署任务失败。(Web部署无法修改该文件 目标上的“MyCoreWebSite.dll”,因为它已被 外部进程。为了使发布操作成功, 您可能需要重新启动应用程序以释放锁, 或者在下一个应用程序上使用.Net应用程序的AppOffline规则处理程序 发布尝试。有关详细信息,请访问: ) 然后我会等一分钟,再试一次,它会工作的。同时,我将运行该实用程序查找锁定DLL的任何

我尝试通过VS2017中的发布上下文菜单将我的.net核心站点部署到Azure,偶尔(大约三分之一的部署)会出现以下错误

Web部署任务失败。(Web部署无法修改该文件 目标上的“MyCoreWebSite.dll”,因为它已被 外部进程。为了使发布操作成功, 您可能需要重新启动应用程序以释放锁, 或者在下一个应用程序上使用.Net应用程序的AppOffline规则处理程序 发布尝试。有关详细信息,请访问: )

然后我会等一分钟,再试一次,它会工作的。同时,我将运行该实用程序查找锁定DLL的任何内容,但它从未找到任何内容


这是一个bug还是我遗漏了一些简单的东西?

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

  • 发布前提供一个
    app_offline.htm
    页面,然后将其删除。我认为在发布配置文件(
    true
    )中自动支持这一点。但如果需要,可以使用自定义部署脚本来完成。在ASP.NET Core 1.x中,我还必须在Startup.cs文件中添加一个文件监视任务来关闭当前进程。我不知道ASP.NET Core 2.0是否还需要它
  • 1的缺点。您的网站在发布期间将处于脱机状态。如果不希望使用站点的副本:将所有文件复制到子目录(例如,
    \PREVIOUS
    ),请更改web.config中的标记,使其指向新子目录中的.exe。现在,根目录中的所有锁都应该消失了。。。发布您的网站,然后再次更改web.config
  • 如果您的网站是负载平衡的,您可以从池中取出一台服务器,进行更新,并在完成后将其添加回池中 4.将其部署到Azure上的“暂存”部署插槽,并在该插槽上启用“自动交换插槽”选项,以便在加载后将其与实时站点交换。