Ich verwende den Erstellungsschritt "Azure-Webanwendung" in VSTS, um eine ASP.NET-Kern-API in einer Azure-Webanwendung zu veröffentlichen:
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.
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.
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.
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:
Fügen Sie vor der Bereitstellung eine Stopp-Task und nach der Bereitstellung eine Start-Task hinzu.
Das hat den Trick für mich gemacht.
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.
Fügen Sie im PropertyGroup-Tag <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
hinzu
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<AzureFunctionsVersion>v2</AzureFunctionsVersion>
<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
</PropertyGroup>
Speichern Sie Ihre Lösung und erstellen Sie sie neu
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.
Ich hoffe es hilft
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}"
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!!