web-dev-qa-db-ja.com

Azure Web App deploy:Web Deployは外部プロセスによってロックされているため、宛先のファイルを変更できません

VSTSの「Azure Web App Deployment」ビルドステップを使用して、ASP.NET Core APIをAzure Web Appに公開しています。

Azure Web App Deployment

時折、このステップは次のエラーで中断します。

[エラー] 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ビルドステップを使用した推奨ソリューションはありません。

20
Dave New

Microsoft Githubリポジトリの別のスレッド here にあるように、次のキーをAzure Appsettingsに追加すると、ロックされたファイルのデプロイメントエラーの解決に役立つハッキングの回避策があります。

MSDEPLOY_RENAME_LOCKED_FILES = 1

このアプリセッティングハックがサポートされる期間はわかりませんが、個人的に問題を解決するのに役立ちました。

enter image description here

36
Ben Barreth

私は同じロックの問題に苦しんでいました。
App Serviceを開始および停止するために追加できる新しいタスク(プレビュー)が追加されました。

enter image description here

展開前に停止タスクを追加し、展開後に開始タスクを追加します。

enter image description here

これは私のためにトリックをしました。

10

次の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アプリを停止し、デプロイ後にアプリを起動します。 enter image description here

8

Function Appを再起動してロックを解除できます。その後、展開できるはずです。

enter image description here

6
kk-dev11

Azure Function Appを公開しようとしたときに同じエラーが発生していました。 this Microsoftドキュメントに従って、次の手順を実行しました。

  1. プロジェクトを右クリックし、編集.... csprojを選択します
  2. 追加 <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline> PropertyGroupタグ内

    <PropertyGroup>
      <TargetFramework>netcoreapp2.1</TargetFramework>
      <AzureFunctionsVersion>v2</AzureFunctionsVersion>
      <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
    </PropertyGroup>
    
  3. ソリューションを保存して再構築する

  4. もう一度公開する

それでもうまくいかない場合は、いつでもMSDEPLOY_RENAME_LOCKED_FILES=1ベン氏が答えで述べたように、あなたのアプリケーション設定に対して。 Visual Studio自体からそれを行うことができます。

enter image description here

enter image description here

それが役に立てば幸い

2
Sibeesh Venu

リリース中にWebサイトをオフラインにすると、うまくいくはずです。

enter image description here

2
akd
  1. アプリサービスを停止する
  2. コードを展開する
  3. アプリサービスを開始する

enter image description here

1
Kurkula

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}"
0
Rui Jarimba

展開プロセスが少し異なるため、asp.netコアプロジェクト専用のタスクがいくつかあります。
無料でマーケットプレイスから入手できます。チェックアウト DNX Tasks vsts marketplace
助けてください!!

0
baywet