33

我正在使用 VSTS 中的“Azure Web App Deployment”构建步骤将 ASP.NET Core API 发布到 Azure Web App:

Azure Web 应用部署

有时,此步骤会因以下错误而中断:

[错误]Microsoft.Web.Deployment.DeploymentDetailedClientServerException:Web 部署无法修改目标上的文件“MyProject.Api.exe”,因为它被外部进程锁定。为了使发布操作成功,您可能需要重新启动应用程序以释放锁定,或者在下次尝试发布时为 .Net 应用程序使用 AppOffline 规则处理程序。了解更多信息:http: //go.microsoft.com/fwlink/ ?LinkId=221672#ERROR_FILE_IN_USE 。

此 GitHub 问题引发了相同的问题,但没有使用 Azure Web 应用部署构建步骤的建议解决方案。

4

12 回答 12

50

根据此处Microsoft Github 存储库中的单独线程,有一个 hacky 解决方法,如果您将以下密钥添加到 Azure Appsettings,它可以帮助解决锁定的文件部署错误:

MSDEPLOY_RENAME_LOCKED_FILES = 1

我不确定这个 appsetting hack 会支持多长时间,但它确实帮助我个人解决了这个问题。

在此处输入图像描述

于 2016-12-15T17:13:17.913 回答
17

我正在努力解决同样的锁定问题。
现在可以添加一个新任务(预览版),用于启动和停止应用服务:

在此处输入图像描述

部署前添加停止任务,部署后添加启动任务。

在此处输入图像描述

这对我有用。

于 2017-07-05T13:47:45.037 回答
10

您可以重新启动 Function App 以解除锁定。之后,您应该能够部署。

在此处输入图像描述

于 2018-04-14T16:13:20.773 回答
8

您可以创建两个 Power Shell 脚本:

stopapp.ps1:

param($websiteName)
$website = Get-AzureWebsite -Name $websiteName
Stop-AzureWebsite -Name $websiteName

启动应用程序.ps1:

param($websiteName)
$website = Get-AzureWebsite -Name $websiteName
Start-AzureWebsite -Name $websiteName

然后在“Azure Web App Deployment”任务之前和之后添加“Azure PowerShell”任务,以在部署前停止 Web 应用程序并在部署后启动应用程序。 在此处输入图像描述

于 2016-06-21T08:12:44.530 回答
8

我在尝试发布 Azure Function App 时遇到了同样的错误。我遵循了这个Microsoft 文档并执行了以下步骤。

  1. 右键单击您的项目并选择编辑 ....csproj
  2. 添加<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>属性组标签

    <PropertyGroup>
      <TargetFramework>netcoreapp2.1</TargetFramework>
      <AzureFunctionsVersion>v2</AzureFunctionsVersion>
      <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
    </PropertyGroup>
    
  3. 保存并重建您的解决方案

  4. 现在再次发布

如果这对您不起作用,您可以随时将MSDEPLOY_RENAME_LOCKED_FILES=1Ben 先生在他的回答中提到的添加到您的应用程序设置中。您可以从 Visual Studio 本身执行此操作。

在此处输入图像描述

在此处输入图像描述

希望能帮助到你

于 2018-12-18T13:09:33.160 回答
4

在发布时使网站脱机应该可以解决问题。

在此处输入图像描述

于 2017-05-05T09:23:38.873 回答
2
  1. 停止应用服务
  2. 部署代码
  3. 启动应用服务

在此处输入图像描述

于 2018-05-24T21:18:02.763 回答
2

只是添加

<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>

到您的发布配置文件(.pubxml)。

于 2020-06-07T18:04:50.237 回答
1

在您为此打开过多的蠕虫罐头之前,请等待 30-60 秒,然后尝试再次发布您的应用程序。似乎有时会发生这种情况,因为向服务发出的停止请求要么在服务完全停止之前返回,要么可能 Visual Studio 没有等待足够长的时间来完成此操作。每次我遇到问题时,等待并重试发布第二次。

于 2020-08-11T03:46:26.583 回答
0

asp.net core 项目有一些专门的任务,因为部署过程有点不同。
您可以从市场上免费获得这些,查看DNX Tasks vsts 市场
希望对您有所帮助!!

于 2016-06-20T13:07:51.053 回答
0

Eddie 的回答接近我所需要的,唯一缺少的是一种指定部署槽的方法:

停止应用程序.ps1

param($websiteName, $websiteSlot)
$website = Get-AzureWebsite -Name $websiteName -Slot $websiteSlot
Stop-AzureWebsite -Name $websiteName -Slot $websiteSlot

启动应用程序.ps1

param($websiteName, $websiteSlot)
$website = Get-AzureWebsite -Name $websiteName -Slot $websiteSlot
Start-AzureWebsite -Name $websiteName -Slot $websiteSlot

然后在您的 Azure PowerShell 任务脚本参数可能是这样的:

-websiteName "{mywebsite}" -websiteSlot "{mydeploymentslot}"
于 2016-08-26T14:45:47.117 回答
0

我的是一个本地发布管道,这就是我所做的。

使应用离线

于 2021-03-10T12:59:35.467 回答