Azure Web App deploy: Web Deploy cannot modify the file on the destination because it is locked by an external process

流过昼夜 提交于 2019-12-03 00:09:23

As per a separate thread in the Microsoft Github repo here, there's a hacky workaround where if you add the following key to the Azure Appsettings, it can help resolve the locked file deployment error:

MSDEPLOY_RENAME_LOCKED_FILES = 1

I'm not sure how long this appsetting hack will be supported, but it did help solve the issue for me personally.

I was struggling with the same locking issue.
There are now a new Tasks (in Preview) that you can add for starting and stopping the App Service:

Add a stop task before deployment and a start task after the deployment.

This did the trick for me.

You can create two Power Shell scripts:

stopapp.ps1:

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

startapp.ps1:

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

And then add an "Azure PowerShell" task before and after "Azure Web App Deployment" task to stop the web app before deploy and start the app after deploy.

You can restart the Function App to release the lock. After that you should be able to deploy.

I was getting the same error while I was trying to publish my Azure Function App. I followed this Microsoft document and did the following steps.

  1. Right click on your Project and select Edit ....csproj
  2. Add <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline> in PropertyGroup tag

    <PropertyGroup>
      <TargetFramework>netcoreapp2.1</TargetFramework>
      <AzureFunctionsVersion>v2</AzureFunctionsVersion>
      <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
    </PropertyGroup>
    
  3. Save and Rebuild your solution

  4. Now publish again

If that didn't work for you, you can always add MSDEPLOY_RENAME_LOCKED_FILES=1 as Mr. Ben mentioned in his answer, to your Application settings. You can do that from Visual Studio itself.

Hope it helps

Taking website offline while release should do the trick.

  1. Stop app service
  2. deploy code
  3. Start app service

There are some dedicated tasks for asp.net core projects because the deployment process is a little bit different.
You can get those from the marketplace for free, check out DNX Tasks vsts marketplace
Hope that helps!!

Eddie's answer was close to what I needed, the only thing that was missing was a way to specify the deployment slot:

stopapp.ps1

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

startapp.ps1

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

And then on your Azure PowerShell task Script Arguments could be something like this:

-websiteName "{mywebsite}" -websiteSlot "{mydeploymentslot}"
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!