VSTSの「Azure Web App Deployment」ビルドステップを使用して、ASP.NET Core APIをAzure Web Appに公開しています。
時折、このステップは次のエラーで中断します。
[エラー] Microsoft.Web.Deployment.DeploymentDetailedClientServerException:Web Deployは外部プロセスによってロックされているため、宛先のファイル 'MyProject.Api.exe'を変更できません。パブリッシュ操作を成功させるには、アプリケーションを再起動してロックを解除するか、次回のパブリッシュ時に.NetアプリケーションのAppOfflineルールハンドラーを使用する必要があります。詳細については、 http://go.Microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE を参照してください。
このGitHubの問題 は同じ問題を引き起こしますが、Azure Web App Deploymentビルドステップを使用した推奨ソリューションはありません。
Microsoft Githubリポジトリの別のスレッド here にあるように、次のキーをAzure Appsettingsに追加すると、ロックされたファイルのデプロイメントエラーの解決に役立つハッキングの回避策があります。
MSDEPLOY_RENAME_LOCKED_FILES = 1
このアプリセッティングハックがサポートされる期間はわかりませんが、個人的に問題を解決するのに役立ちました。
次の2つの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
そして、「Azure Web App Deployment」タスクの前後に「Azure PowerShell」タスクを追加して、デプロイ前にWebアプリを停止し、デプロイ後にアプリを起動します。
Azure Function Appを公開しようとしたときに同じエラーが発生していました。 this Microsoftドキュメントに従って、次の手順を実行しました。
追加 <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
PropertyGroupタグ内
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<AzureFunctionsVersion>v2</AzureFunctionsVersion>
<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
</PropertyGroup>
ソリューションを保存して再構築する
もう一度公開する
それでもうまくいかない場合は、いつでもMSDEPLOY_RENAME_LOCKED_FILES=1
ベン氏が答えで述べたように、あなたのアプリケーション設定に対して。 Visual Studio自体からそれを行うことができます。
それが役に立てば幸い
Eddieの答えは、私が必要としていたものに近く、欠けていた唯一のことは、展開スロットを指定する方法でした。
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
そして、Azure PowerShellタスクでは、スクリプト引数は次のようになります。
-websiteName "{mywebsite}" -websiteSlot "{mydeploymentslot}"
展開プロセスが少し異なるため、asp.netコアプロジェクト専用のタスクがいくつかあります。
無料でマーケットプレイスから入手できます。チェックアウト DNX Tasks vsts marketplace
助けてください!!