Проблема при развертывании основного приложения asp.net с помощью powershell

У меня есть веб-приложение ASP.NET Core, размещенное в IIS. У нас также есть сервер сборки, используемый для непрерывной интеграции с использованием Jenkins. Дженкинс получает последнюю версию GitHub, создает и публикует проект в локальной папке, а затем выполняет сценарий PowerShell, чтобы скопировать опубликованную папку на веб-сервер. (он просто копирует файлы из локальной папки в сетевую с помощью Copy-Item)

Сценарий powershell сначала останавливает remote веб-сайт IIS перед копированием файла. (и я подтвердил, что удаленный веб-сайт действительно остановлен перед развертыванием)

Однако время от времени мы получаем ошибку при копировании файлов.

Copy-Item: процесс не может получить доступ к файлу \\some_ip\_apps\myapp\UI\UI.dll, потому что он используется другим процессом.

Итак, я загрузил дескриптор, чтобы проверить, кто обращается к этому файлу в Интернете. сервер, и я оказался его dotnet.exe

Как мне остановить dotnet.exe удаленно или как отпустить дескриптор удаленно с помощью powershell

введите здесь описание изображения


person LP13    schedule 24.01.2018    source источник
comment
Такое ощущение, что вы изобретаете велосипед. Почему бы просто не использовать Web Deploy и покончить с этим?   -  person NightOwl888    schedule 25.01.2018
comment
в статье говорится Files in the publish folder are locked when the app is running. Locked files can't be overwritten. To release locked files in a deployment, stop the app pool, поэтому даже с веб-развертыванием мне приходится вручную или с помощью PS останавливать пул приложений   -  person LP13    schedule 25.01.2018
comment
В нем также говорится, что Web Deploy является альтернативой PowerShell для их разблокировки (и я использовал ее, и у меня никогда не было проблем с блокировкой). Можно выбрать один из трех вариантов, а не использовать все три.   -  person NightOwl888    schedule 26.01.2018


Ответы (1)


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

Что касается PowerShell, то Get-Process и Stop-Process вместе с обычными средствами удаленного взаимодействия позволит вам закрыть dotnet.exe.

person Matt Hill    schedule 30.01.2018