Azure网站发布失败,文件正在使用中。

3
我有一个Web应用程序,我要发布到Azure网站。有时它可以无问题地发布。然而,往往会在特定的二进制文件(业务逻辑dll之一)上失败,指出该文件正在使用中。 快速谷歌后,似乎这意味着服务器端正在使用该文件。这很奇怪,因为此时肯定没有对此Web应用程序进行任何请求。 是否有某些配置选项需要设置以强制卸载dll?我以前发布过Azure网站,从未见过这种情况。

您还可以使用“部署槽”来解决此问题。创建一个具备生产环境设置的新部署槽,并将其部署到全新的实例中,然后进行交换即可。 - neo112
6个回答

2
我们曾经遇到过类似的情况。我们使用以下步骤解决了该问题。
  • 从门户停止站点

  • 使用客户端(例如FileZilla)通过FTP登录站点。您可以通过查找publishMethod="FTP"部分来获取发布配置文件中的FTP网址和凭据。

  • 导航至站点/wwwroot文件夹

  • 删除锁定的文件

  • 启动网站

  • 立即从门户的部署选项卡重新部署站点。


1

请查看如何在发布时将Web应用程序脱机,以获取可能的解决方案。基本上包括

<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>

在您的pubxml文件中进行更改应该可以解决问题。但是请注意,这种方法可能在某些情况下无法正常工作,特别是对于ASP.NET Core,如GitHub上的此线程所证明的那样。

1
你应该先学习一些关于IIS和Web Deploy的知识。
看看这个stackoverflow问题,它基本上描述了你遇到的问题。总的来说,使用程序集有点奇怪。不知道具体原因,但它存在于你的程序集中,更重要的是它如何被使用。
作为建议-在部署之前回收站点(停止和启动)。或者尝试在站点停止时进行部署(我怀疑这将是可能的)。

0

你可以采用多种解决方案

  1. 从 Azure 中删除现有文件。

  2. 更改 Azure 配置设置

    MSDEPLOY_RENAME_LOCKED_FILES = 1

  3. 如果您不想删除文件,则可以停止服务,例如(Webjobs)。

    WEBJOBS_STOPPED = 1


0

对我而言唯一有效的解决方案是:删除该站点,然后重新部署(使用相同名称)。FTP凭据仍然有效。

其他我尝试过但无法解决的方法:

  • 停止网站并尝试通过FTP或通过Kudu命令行删除(或重命名)受锁定的程序集。出现访问被拒绝的错误Kill w3wp通过Kudu。程序集仍保持锁定状态。将DLL重命名为不同的文件并重新部署。某种方式应用程序无法启动,因为它无法访问已锁定的文件,尽管其他程序集不再引用它。

0

显然,在发布过程中上传到您的服务器的App_Offline.htm文件实际上应该命名为app_offline.htm(即小写)。 系统无法以不区分大小写的方式识别该文件是一个错误(在this GitHub issue中某个时刻被认可)。

因此,如果将<EnableMSDeployAppOffline>True</EnableMSDeployAppOffline>添加到您的.pubxml文件不起作用,Azure web app也无法重新启动,请尝试在服务器上将App_Offline.htm重命名为app_offline.htm(可能需要再次发布)。 它应该可以工作。

PS:据说这个错误在2017年1月的.NET Core中已经修复(请参阅链接的问题),但我无法弄清楚问题是Azure中的.NET版本还是上传PC中的.NET版本或其他原因(this thread没有帮助我)。 同时,似乎问题确实得到了解决,因为我们再也没有遇到过这个问题。


现在是2020年6月26日,当我通过FTP发布.NET Core 2 Razor Pages应用程序时,我仍然遇到这个问题。我必须进去并重命名6个不同的文件。 - JustJohn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接