web-dev-qa-db-fra.com

Déploiement Azure Web App: Web Deploy ne peut pas modifier le fichier sur la destination car il est verrouillé par un processus externe.

J'utilise l'étape de génération "Déploiement Azure Web App" dans VSTS pour publier une API ASP.NET Core dans une application Web Azure:

 Azure Web App Deployment

Parfois, cette étape rompt avec l'erreur suivante:

[erreur] Microsoft.Web.Deployment.DeploymentDetailedClientServerException: Web Deploy ne peut pas modifier le fichier 'MyProject.Api.exe' sur la destination car il est verrouillé par un processus externe. Pour que Permette la publication réussie, vous devrez peut-être redémarrer votre application pour libérer le verrou ou utiliser le gestionnaire de règle AppOffline Pour les applications .Net sur votre ordinateur. prochaine tentative de publication. Pour en savoir plus sur , Rendez-vous sur: http://go.Microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE .

Ce problème GitHub soulève le même problème, mais il n'y a pas de solution suggérée utilisant l'étape de génération de déploiement d'Azure Web App.

11
davenewza

Selon un fil séparé du repo Microsoft Github here , il existe une solution de contournement simpliste selon laquelle si vous ajoutez la clé suivante à Azure Appsettings, elle peut aider à résoudre l’erreur de déploiement de fichier verrouillé: 

MSDEPLOY_RENAME_LOCKED_FILES = 1

Je ne sais pas combien de temps ce bidouillage d'apps sera supporté, mais cela m'a aidé à résoudre le problème personnellement. 

 enter image description here

32
Ben Barreth

Vous pouvez créer deux scripts Power Shell:

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

Ajoutez ensuite une tâche "Azure PowerShell" avant et après la tâche "Azure Web App Deployment" afin d'arrêter l'application Web avant le déploiement et de démarrer l'application après le déploiement.  enter image description here

8
Eddie Chen - MSFT

Je me débattais avec le même problème de verrouillage.
Il existe maintenant de nouvelles tâches (dans Aperçu) que vous pouvez ajouter pour démarrer et arrêter App Service:

 enter image description here

Ajoutez une tâche d'arrêt avant le déploiement et une tâche de démarrage après le déploiement.

 enter image description here

Cela a fait le tour pour moi.

6
Magnus Johansson

Vous pouvez redémarrer l'application Function pour libérer le verrou. Après cela, vous devriez pouvoir vous déployer.

 enter image description here

2
kk-dev11

Mettre le site Web hors ligne pendant la publication devrait faire l'affaire.

 enter image description here

2
akd

J'avais la même erreur en essayant de publier mon application Azure Function. J'ai suivi this Microsoft document et ai suivi les étapes suivantes.

  1. Faites un clic droit sur votre projet et sélectionnez Modifier .... csproj
  2. Ajouter <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline> dans la balise PropertyGroup

    <PropertyGroup>
      <TargetFramework>netcoreapp2.1</TargetFramework>
      <AzureFunctionsVersion>v2</AzureFunctionsVersion>
      <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
    </PropertyGroup>
    
  3. Enregistrez et reconstruisez votre solution

  4. Maintenant publier à nouveau

Si cela ne fonctionne pas pour vous, vous pouvez toujours ajouter MSDEPLOY_RENAME_LOCKED_FILES=1, comme l'a mentionné M. Ben dans sa réponse, à vos paramètres d'application. Vous pouvez le faire à partir de Visual Studio lui-même.

 enter image description here

 enter image description here

J'espère que ça aide

1
Sibeesh Venu

La réponse d'Eddie était proche de ce dont j'avais besoin, la seule chose qui manquait était un moyen de spécifier l'emplacement de déploiement:

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

Et puis, dans votre tâche Azure PowerShell, les arguments de script peuvent ressembler à ceci:

-websiteName "{mywebsite}" -websiteSlot "{mydeploymentslot}"
0
Rui Jarimba
  1. Arrêter le service de l'application 
  2. déployer du code
  3. Démarrer le service de l'application

 enter image description here

0
Kurkula

Certaines tâches sont réservées aux projets principaux asp.net car le processus de déploiement est légèrement différent.
Vous pouvez les obtenir gratuitement sur le marché, consultez DNX Tasks vsts marketplace
J'espère que cela pourra aider!!

0
baywet