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:
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.
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.
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.
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.
Ajouter <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
dans la balise PropertyGroup
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<AzureFunctionsVersion>v2</AzureFunctionsVersion>
<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
</PropertyGroup>
Enregistrez et reconstruisez votre solution
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.
J'espère que ça aide
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}"
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!!