Сделать MSDeploy (Visual Studio) не удалять папку App_Data, но удалять все остальное

Я использую кнопку Publish Visual Studio для развертывания моего сайта и хочу, чтобы на сервере была другая папка App_Data. Есть флажок « Leave extra files on destination (do not delete) который предотвращает удаление моей папки App_Data, но затем он в конечном итоге накапливает много рудиментарных файлов по мере изменения веб-сайта.

Есть ли способ заставить его исключать только App_Data, когда он удаляет все?

Это можно сделать, когда вы вызываете msdeploy вручную – просто добавьте следующий параметр:

 -skip:Directory=\\App_Data 

См. Раздел «Параметры развертывания веб-развертывания» . Путь является регулярным выражением, поэтому он довольно гибкий.

Если вы развертываете сценарий ProjectName.deploy.cmd, созданный VS, вы также можете передать этот параметр в переменной среды _MsDeployAdditionalFlags (при запуске этого скрипта).

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

РЕДАКТИРОВАТЬ:

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

Прежде всего, приведенное выше правило пропуска пропускает любые операции на пути сопоставления (App_Data). Если требуется более подробное управление, доступен более подробный синтаксис. Например, чтобы пропустить только удаление (чтобы сохранить дополнительные файлы на целевом сервере, но добавить новые и обновить существующие):

 -skip:skipaction='Delete',objectname='filePath',absolutepath='\\App_Data\\.*' -skip:skipaction='Delete',objectname='dirPath',absolutepath='\\App_Data\\.*' 

Это пропускает удаление всех файлов и всех подпапок (со всем их содержимым) в App_Data, но не предотвращает добавление и обновления.

Другая полезная вещь заключается в том, что в файле проекта ( .csproj ) могут быть определены правила пропуска, чтобы они автоматически включались в сценарий .deploy.cmd сгенерированный вместе с пакетом. Это делает ненужным передавать их скрипту через _MsDeployAdditionalFlags.

Вышеупомянутое правило пропуска будет добавлено, если в файл csproj включено следующее:

  AddCustomSkipRules     Delete filePath $(_Escaped_PackageTempDir)\\App_Data\\.*     Delete dirPath $(_Escaped_PackageTempDir)\\App_Data\\.*      

(имена AddCustomSkipRules и SkipDeleteAppData полностью произвольны, возможно, потребуется $(_Escaped_PackageTempDir) , но на практике я всегда видел, что он оценивает пустую строку)

См. Раздел Веб-развертывание: настройка пакета развертывания и настройка параметров MSDeploy в файле .csproj для получения дополнительной информации.

Одно предостережение: это только добавляет эти правила в сценарий .deploy.cmd , поэтому бесполезно, если вы хотите использовать графический диспетчер IIS для развертывания пакета, поскольку он не использует этот скрипт (тот же, вероятно, относится к развертыванию из VS , но я не проверил).

Просмотрели ли вы пакет / публикацию веб-страниц в настройках проекта, потому что вы можете сказать, что он исключает файлы в папке App_Data.

По моему опыту, MsDeploySkipRules запускаются только при развертывании из командной строки.

Если вы публикуете с Visual Studio на Azure (или используя другой метод Web Deploy), вы можете установить следующее при публикации.

  • Удаление дополнительных файлов в пункте назначения
  • Исключить файлы из папки App_Data

Когда «Удалить дополнительные файлы в месте назначения» отмечен, он проведет сравнение между файлами и папками, которые вы развертываете, и теми, которые находятся на сервере.

Будьте осторожны, вы можете столкнуться с проблемами, если у вас есть пользовательский контент, например, «Загрузки». Но это можно обойти, сохранив эти папки в другом месте, например S3 / Azure Storage.

Профиль веб-публикации

Это не идеально, так как вы можете копировать много файлов, делая это (я не), но вот мое решение для резервного копирования папки. Адаптирован для перемещения папки в папку, из которой она будет опубликована, во время процесса публикации. Поместите это в свой файл pubxml:

  ...        

И если вы просто хотите сделать любое количество определенных известных файлов, сделайте один экземпляр блока для каждого файла:

    
  • Развертывание проекта Maven throws java.util.zip.ZipException: недопустимый заголовок LOC (плохая подпись)
  • PhpStorm - преимущества редактирования развернутых файлов напрямую, а также загрузка и синхронизация
  • Как развернуть SQL Server Compact Edition 4.0?
  • Лучший способ развертывания приложения Visual Studio, которое может работать без установки
  • Горячее развертывание на JBoss - как мне заставить JBoss «видеть» изменение?
  • Существует ли компилятор R?
  • Как установить регистр переменной для сохранения между играми в недоступном?
  • Ошибка развертывания Heroku H10 (приложение разбилось)
  • Какой метод вы используете для развертывания приложений ASP.Net в дикой природе?
  • Как я могу развернуть приложение .NET, использующее ODAC, без установки всего компонента пользователю?
  • Ошибка развертывания: запуск Tomcat не удался, порт 8080 сервера уже используется
  • Давайте будем гением компьютера.