it-swarm.com.ru

Развертывание Azure Web App: Web Deploy не может изменить файл в месте назначения, поскольку он заблокирован внешним процессом

Я использую шаг сборки «Развертывание веб-приложения Azure» в VSTS для публикации основного API-интерфейса ASP.NET в веб-приложении Azure:

 Azure Web App Deployment

Иногда этот шаг прерывается со следующей ошибкой:

[Ошибка] Microsoft.Web.Deployment.DeploymentDetailedClientServerException: Web Deploy не может изменить файл «MyProject.Api.exe» в назначение, потому что он заблокирован внешним процессом. Чтобы для успешного завершения операции публикации может потребоваться перезапуск ваше приложение, чтобы снять блокировку, или используйте правило AppOffline обработчик приложений .Net при следующей попытке публикации. Учить больше на: http://go.Microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE .

Эта проблема с GitHub поднимает ту же проблему, но не существует предложенного решения с использованием шага сборки Azure Web App Deployment.

11
davenewza

Что касается отдельного потока в репозитории Microsoft Github здесь , есть хакерский обходной путь, при котором, если вы добавите следующий ключ в настройки приложений Azure, это может помочь устранить ошибку развертывания заблокированного файла: 

MSDEPLOY_RENAME_LOCKED_FILES = 1

Я не уверен, как долго будет поддерживаться этот взлом приложений, но он помог решить проблему лично для меня. 

 enter image description here

32
Ben Barreth

Вы можете создать два сценария 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 PowerShell» до и после задачи «Развертывание веб-приложения Azure», чтобы остановить веб-приложение перед развертыванием и запустить приложение после развертывания .  enter image description here

8
Eddie Chen - MSFT

Я боролся с той же проблемой блокировки.
Теперь есть новые задачи (в режиме предварительного просмотра), которые можно добавить для запуска и остановки службы приложений:

 enter image description here

Добавьте задачу остановки перед развертыванием и задачу запуска после развертывания.

 enter image description here

Это помогло мне.

6
Magnus Johansson

Вы можете перезапустить приложение Function, чтобы снять блокировку. После этого вы сможете развернуть.

 enter image description here

2
kk-dev11

Перевод веб-сайта в автономный режим при выпуске должен помочь.

 enter image description here

2
akd

Я получал ту же ошибку, когда пытался опубликовать свое приложение-функцию Azure. Я проследовал это документ Microsoft и сделал следующие шаги.

  1. Щелкните правой кнопкой мыши по вашему проекту и выберите Edit .... 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

Надеюсь, поможет

1
Sibeesh Venu

Ответ Эдди был близок к тому, что мне было нужно, единственное, чего не хватало, был способ указать место для развертывания:

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
  1. Остановить службу приложения 
  2. развернуть код
  3. Запустить сервис приложений

 enter image description here

0
Kurkula

Для основных проектов asp.net есть несколько специальных задач, потому что процесс развертывания немного отличается.
Вы можете получить их с рынка бесплатно, ознакомьтесь с Задачи DNX vsts marketplace
Надеюсь, это поможет!!

0
baywet