Развертывание проблемы PrecompiledApp

Автоматически сгенерированный PrecompiledApp.config вызывает у меня некоторую головную боль. Я автоматизирую развертывание старого веб-сайта и в 50% случаев, когда я внедряю, я получаю эту ошибку:

System.IO.IOException: The process cannot access the file '\\web.prod.local\c$\Sites\Website\PrecompiledApp.config' because it is being used by another process.

Содержание:

<precompiledApp version="2" updatable="true"/>

Насколько мне известно, веб-сайты используют некоторую функцию теневого копирования, позволяющую обновлять "время выполнения" сайта, с помощью таких вещей, как app.config и т. Д. Однако этот 1 файл кажется исключением.

Может кто-нибудь предложить обходной путь, кроме остановки сайта при развертывании?

С уважением

1 ответ

Судя по пути в сообщении об ошибке, я вижу, что вы пытаетесь скопировать файлы через общий сетевой ресурс при развертывании. Это плохая практика для обновления файлов напрямую через сетевой ресурс или FTP и т. Д. И это причина, на самом деле. Развертывание в сети происходит медленно, и пока некоторые файлы все еще обновляются / загружаются - ASP.NET на сервере уже пытается перезапустить приложение, скопировать файлы во "Временные папки ASP.NET" и т. Д. И т. Д. И т. Д.

Рекомендации по развертыванию:

Заархивируйте предварительно скомпилированный сайт, загрузите, а затем запустите UNZIP на сервере удаленно

Вот как вы запускаете UNZIP удаленно:

plink -ssh -l USERNAME -pw PASSWORD web.prod.local c:\Sites\Website\unzip -q -o c:\Sites\Website\site.zip -d c:\Sites\Website\

"plink" - это бесплатный инструмент SSH для Windows (командная строка), который вам нужен на вашем компьютере разработчика.

"web.prod.local" - это адрес вашего сервера.

"c: \ Sites \ Website \" - это путь вашего сайта к серверу.

Вам нужен SSH, установленный на вашем сервере для удаленного запуска команд, самый простой вариант - установить бесплатный инструмент: "freesshd" (google it)

Удалите также "unzip.exe" на сервере, вы видите, что он вызывается прямо там. Самый простой способ - поместить его прямо в каталог c: \ Sites \ Website \

PS. Это всего лишь пример, вы можете придумать собственное решение

Другие вопросы по тегам