Ответ 1
UPDATE: Очевидно, что вы действительно хотите, чтобы веб-развертывание не удаляло существующий каталог на конечном сервере, но все же создайте папку, если она не существует. Вы можете выполнить это следующим образом:
-
создайте файл YourWebProjectName.wpp.targets рядом с вами файл проекта со следующим содержимым:
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <MsDeploySkipRules Include="SkipELMAHFolderFiles"> <SkipAction></SkipAction> <ObjectName>filePath</ObjectName> <AbsolutePath>$(_DestinationContentPath)\\NameOfYourFolder\\.*</AbsolutePath> <Apply>Destination</Apply> <XPath></XPath> </MsDeploySkipRules> <MsDeploySkipRules Include="SkipELMAHFolderChildFolders"> <SkipAction></SkipAction> <ObjectName>dirPath</ObjectName> <AbsolutePath>$(_DestinationContentPath)\\NameOfYourFolder\\.*\\*</AbsolutePath> <Apply>Destination</Apply> <XPath></XPath> </MsDeploySkipRules> </ItemGroup> </Project>
Измените NameOfYourFolder
и YourWebProjectName
соответственно. Это предполагает, что у вас есть это в корне, я считаю, вы можете использовать относительный путь, если это не так.
- Первая запись
MsDeploySkipRules
указывает webdeploy не удалять файлы в Name_OfYourFolder. - Второй
MsDeploySkipRules
указывает webdeploy не удалять дочерние папки в Name_OfYourFolder.
Кроме того, чтобы создать папку, если она отсутствует на целевом сервере, вы должны сделать следующее:
- включить папку в проект
- добавьте в него файл фиктивного DeployemntPlaceholder.txt и включите его в проект.
DeployemntPlaceholder.txt требуется сообщить MSBUild о добавлении папки в пакет: пустые папки игнорируются.
Я тестировал этот подход, и он отлично работает, когда вы запускаете публикацию таким образом, как вы показали. Я использовал этот ответ, чтобы получить элементы msbuild в файле syntaxt. Я считаю, что это способ MSBuild для настройки флагов, переданных в webdeploy по протоколу развертывания MSBuild.
Если вы запустили MSDeploy напрямую, вы можете использовать аргументы пропуска следующим образом:
-skip:objectname='filePath',absolutepath='logs\\.*\\someNameToExclude\.txt'
ОБНОВЛЕНИЕ 2
Возможно, вы также захотите иметь разрешения на запись ACL, установленные в вашей папке \Uploads, - вот полное руководство для этого: Настройка разрешений на папки в Интернете Публикация
В соответствии с исходным вопросом "Указание папок, которые не синхронизируются в Web Deploy", самый простой способ сделать это:
Вы можете создать профиль публикации и добавить следующие строки:
<PropertyGroup>
<ExcludeFilesFromDeployment>
File1.aspx;File2.aspx
</ExcludeFilesFromDeployment>
<ExcludeFoldersFromDeployment>
Folder1;Folder2
</ExcludeFoldersFromDeployment>
</PropertyGroup>
Я тестировал этот подход для исключения файлов с использованием профилей публикации. Легкое руководство здесь (прокрутите до отредактируйте файл .pubxml, чтобы исключить раздел robots.txt).
Вы также можете сделать это в файле .wpp.targets или отредактировать csproj. Подробнее см. Часто задаваемые вопросы по развертыванию веб-развертывания для Visual Studio и ASP.NET