2017-09-27 78 views
3

我尝试通过VS2017中的发布上下文菜单将Azure .net核心站点部署到Azure,偶尔(大约1比3部署),我得到下面的错误。网站DLL似乎在发布时间歇性锁定

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

那我就从字面上等一会,再试一次,它会工作。同时,我将运行handle实用程序查找锁定该DLL的任何内容,并且它从未发现任何内容。

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

回答

5

ASP.NET核心不支持影子复制文件,这意味着ASP.NET核心进程(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。现在,根目录中的所有锁应该消失...发布您的站点并在之后再次更改web.config。
  3. 如果您的网站是负载均衡的,您可以从课程中取出一台服务器,更新它并在完成后将其添加回池中。
+2

4.将其部署到Azure上的“暂存”部署插槽,并在插槽上打开“自动交换插槽”选项,以便在装载后将其与现场网站交换。 –