wake-up-neo.com

Bereitstellung von Azure Web App: Web Deploy kann die Datei am Ziel nicht ändern, da sie durch einen externen Prozess gesperrt ist

Ich verwende den Erstellungsschritt "Azure-Webanwendung" in VSTS, um eine ASP.NET-Kern-API in einer Azure-Webanwendung zu veröffentlichen:

 Azure Web App Deployment

Gelegentlich bricht dieser Schritt mit dem folgenden Fehler ab:

[Fehler] Microsoft.Web.Deployment.DeploymentDetailedClientServerException: Web Deploy kann die Datei "MyProject.Api.exe" am Ziel nicht ändern, da sie durch einen externen Prozess gesperrt ist. Damit Den Veröffentlichungsvorgang erfolgreich abschließen kann, müssen Sie möglicherweise Ihre Anwendung erneut starten, um die Sperre aufzuheben, oder den AppOffline-Regel-Handler Für .Net-Anwendungen in Ihrem verwenden nächster Veröffentlichungsversuch. Weitere Informationen zu Finden Sie unter: http://go.Microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE .

Dieses GitHub-Problem wirft dasselbe Problem auf, es wird jedoch keine Lösungsvorschlag für den Build-Schritt der Azure Web App-Bereitstellung vorgeschlagen.

11
davenewza

Gemäß einem separaten Thread im Microsoft Github-Repo hier gibt es eine hacklige Problemumgehung. Wenn Sie den Azure Appsettings den folgenden Schlüssel hinzufügen, können Sie den Bereitstellungsfehler für gesperrte Dateien beheben: 

MSDEPLOY_RENAME_LOCKED_FILES = 1

Ich bin nicht sicher, wie lange dieser App-Hack unterstützt wird, aber er hat das Problem für mich persönlich gelöst. 

 enter image description here

32
Ben Barreth

Sie können zwei Power Shell-Skripts erstellen:

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

Fügen Sie dann vor und nach der Aufgabe "Azure Web App-Bereitstellung" eine Task "Azure PowerShell" hinzu, um die Web-App vor der Bereitstellung zu stoppen und die App nach der Bereitstellung zu starten.  enter image description here

8

Ich hatte mit dem gleichen Sperrproblem zu kämpfen.
Es gibt jetzt neue Aufgaben (in der Vorschau), die Sie hinzufügen können, um den App Service zu starten und zu stoppen:

 enter image description here

Fügen Sie vor der Bereitstellung eine Stopp-Task und nach der Bereitstellung eine Start-Task hinzu.

 enter image description here

Das hat den Trick für mich gemacht.

6

Sie können die Funktions-App erneut starten, um die Sperre aufzuheben. Danach sollten Sie bereitstellen können.

 enter image description here

2
kk-dev11

Wenn Sie Ihre Website während der Veröffentlichung offline schalten, sollte dies der Trick sein.

 enter image description here

2
akd

Ich habe dieselbe Fehlermeldung erhalten, als ich versuchte, meine Azure Function App zu veröffentlichen. Ich folgte this Microsoft-Dokument und führte die folgenden Schritte aus.

  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie Bearbeiten .... csproj
  2. Fügen Sie im PropertyGroup-Tag <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline> hinzu

    <PropertyGroup>
      <TargetFramework>netcoreapp2.1</TargetFramework>
      <AzureFunctionsVersion>v2</AzureFunctionsVersion>
      <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
    </PropertyGroup>
    
  3. Speichern Sie Ihre Lösung und erstellen Sie sie neu

  4. Jetzt wieder veröffentlichen

Wenn dies nicht funktioniert hat, können Sie MSDEPLOY_RENAME_LOCKED_FILES=1, wie Herr Ben in seiner Antwort erwähnt hat, immer zu Ihren Anwendungseinstellungen hinzufügen. Sie können dies in Visual Studio selbst tun.

 enter image description here

 enter image description here

Ich hoffe es hilft

1
Sibeesh Venu

Eddies Antwort war nahe an dem, was ich brauchte. Das einzige, was fehlte, war eine Möglichkeit, den Bereitstellungsslot anzugeben:

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

In Ihrer Azure PowerShell-Task können Skriptargumente wie folgt aussehen:

-websiteName "{mywebsite}" -websiteSlot "{mydeploymentslot}"
0
Rui Jarimba
  1. Beenden Sie den App-Dienst 
  2. code bereitstellen
  3. App-Dienst starten

 enter image description here

0
Kurkula

Es gibt einige dedizierte Aufgaben für asp.net-Kernprojekte, da der Bereitstellungsprozess etwas anders ist.
Sie können diese kostenlos vom Marktplatz erhalten, check out DNX Tasks vsts marketplace
Hoffentlich hilft das!!

0
baywet