Сделать MSDeploy (Visual Studio) не удалять папку App_Data, но удалять все остальное
Я использую кнопку Publish
Visual Studio для развертывания моего сайта и хочу, чтобы на сервере была другая папка App_Data. Есть флажок « Leave extra files on destination (do not delete)
который предотвращает удаление моей папки App_Data, но затем он в конечном итоге накапливает много рудиментарных файлов по мере изменения веб-сайта.
Есть ли способ заставить его исключать только App_Data, когда он удаляет все?
- Как ссылаться на другую версию dll с помощью MSBuild
- Приложение Java EE Enterprise: выполните некоторые действия по развертыванию / запуску
- Создание Windows Installer для программ на Java
- Объединить msi и exe
- Dll как в бункере, так и в gac, который используется?
- Запуск приложения на основе .net без .NET Framework
- Как вручную установить веб-сервис на Tomcat 6?
- Как изменить цвет фона в меню параметров?
- .war vs .ear file
- Использование Maven для развертывания
- Как найти полное имя сборки?
- Android Studio не развертывает изменения в приложении
- XamlParseException после развертывания проекта WPF
Это можно сделать, когда вы вызываете 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:
...
И если вы просто хотите сделать любое количество определенных известных файлов, сделайте один экземпляр блока для каждого файла: