Это можно сделать, когда вы вызываете msdeploy вручную - просто добавьте следующий параметр:
-skip:Directory=\\App_Data
См. Параметры операции веб-развертывания .Путь является регулярным выражением, поэтому он достаточно гибкий.
Если вы развертываете с использованием созданного VS сценария ProjectName.deploy.cmd, вы также можете передать этот параметр в переменную среды _MsDeployAdditionalFlags (при запуске этого сценария).).
Это лучшее, что я придумал для наших нужд (у нас такая же ситуация, как у вас).Я не пытался интегрировать его с кнопкой VS публикации, так как мы развертываем из командной строки.
РЕДАКТИРОВАТЬ:
Я узнал кое-что о MSDeploy, так как я опубликовалэтот ответ, поэтому я решил обновить его сейчас.
Прежде всего, вышеупомянутое правило пропуска пропускает любые операции на соответствующем пути (App_Data).Если требуется более детальный контроль, доступен более подробный синтаксис.Например, чтобы пропустить только удаления (сохранить все дополнительные файлы на целевом сервере, но добавить новые и обновить существующие):
-skip:skipaction='Delete',objectname='filePath',absolutepath='\\App_Data\\.*' -skip:skipaction='Delete',objectname='dirPath',absolutepath='\\App_Data\\.*'
Пропускает удаление всех файлов и всех подпапок (со всеми ихcontent) в App_Data, но не предотвращает добавления и обновления.
Еще одна полезная вещь - это то, что правила пропуска могут быть определены в файле проекта (.csproj
), чтобы они автоматически включались в .deploy.cmd
Сценарий генерируется вместе с пакетом.Это избавляет от необходимости передавать их в сценарий через _MsDeployAdditionalFlags.
Приведенное выше правило пропуска будет добавлено, если в файл csproj
добавлено следующее:
<PropertyGroup>
<OnBeforePackageUsingManifest>AddCustomSkipRules</OnBeforePackageUsingManifest>
</PropertyGroup>
<Target Name="AddCustomSkipRules">
<ItemGroup>
<MsDeploySkipRules Include="SkipDeleteAppData">
<SkipAction>Delete</SkipAction>
<ObjectName>filePath</ObjectName>
<AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
<MsDeploySkipRules Include="SkipDeleteAppData">
<SkipAction>Delete</SkipAction>
<ObjectName>dirPath</ObjectName>
<AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
</ItemGroup>
</Target>
(имена AddCustomSkipRules
и SkipDeleteAppData
абсолютно произвольны; $(_Escaped_PackageTempDir)
предполагается, что возможно необходимо, но на практике я всегда видел, чтобы оно вычислялось как пустая строка)
См. Web Deploy: настройка пакета развертывания и Как установить параметры MSDeploy в файле .csproj для получения дополнительной информации.
Одно предупреждение: это только добавляет эти правила к .deploy.cmd
сценария, поэтому он бесполезен, если вы хотите использовать графический диспетчер IIS для развертывания пакетов, поскольку он не использует этот сценарий (то же самое, вероятно, относится и к развертыванию из VS, но я не проверял).