Указание папок, которые не синхронизируются в Web Deploy

Я использую следующий script для развертывания моего приложения ASP.NET MVC на нашем веб-сервере:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe MySolution.sln^
/p:Configuration=TeamCity-Test^
/p:OutputPath=bin^
/p:DeployOnBuild=True^
/p:DeployTarget=MSDeployPublish^
/p:MsDeployServiceUrl=https://mywebserver.com:8172/msdeploy.axd^
/p:username=MyDomain\MyUser^
/p:password=MyPassword^
/p:AllowUntrustedCertificate=True^
/p:DeployIisAppPath=mywebsitename.com^
/p:MSDeployPublishMethod=WMSVC

Теперь мне нужно указать, чтобы не синхронизировать папку /uploads. Могу ли я указать, что в этом script? Спасибо!

Разъяснение: У меня есть папка Uploads в моем проекте. Я хотел бы, чтобы Web Deploy создавал папку. Я не хочу, чтобы он удалял папку/подпапки/файлы с моего веб-сервера, потому что он содержит загруженный пользователем контент.

Уточнение № 2: Я просто нашел параметр SkipExtraFilesOnServer=True. Однако я не хочу, чтобы это было глобальным. Я хотел бы установить его в одну папку.

Ответы

Ответ 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