MsDeploySkipRules в wpp.targets не работает с PublishProfiles

Я публикую свой проект MVC с помощью PublishProfile через визуальную студию (через пользовательский интерфейс, щелкните правой кнопкой мыши проект, опубликуйте) и отметьте опцию, чтобы очистить папку назначения. Но я не хочу, чтобы конкретная папка "Загрузки" очищалась

Я потратил бесчисленные часы, пытаясь заставить это работать, я думаю, что у меня точно такой же код, как и человек, который здесь объяснил, но он все равно удаляет папку "Загрузки"

Также в качестве примера, приведенного ниже, у меня есть ExcludeFromPackageFiles "favicon", который работает, если я отменяю удаление папки назначения (просто чтобы показать, что мои цели wpp действительно выполняются).

Ниже мой файл имя_проекта.wpp.targets

<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <!-- this doesnt work -->
  <PropertyGroup>
    <AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest>
  </PropertyGroup>

  <PropertyGroup>
    <UseMsDeployExe>true</UseMsDeployExe>
  </PropertyGroup>

  <Target Name="AddCustomSkipRules">
    <Message Text="Adding Custom Skip Rules" />
    <ItemGroup>
      <MsDeploySkipRules Include="SkipErrorLogFolder1">
        <SkipAction>Delete</SkipAction>
        <ObjectName>filePath</ObjectName>
        <AbsolutePath>ErrorLog</AbsolutePath>
      </MsDeploySkipRules>
    </ItemGroup>
  </Target>

  <!-- this works! -->
  <ItemGroup>
    <ExcludeFromPackageFiles Include="favicon.ico">
      <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
    </ExcludeFromPackageFiles>
  </ItemGroup>

</Project>

Есть идеи?

1 ответ

Решение

(1) AbsolutePath значение в вашем примере скопировано / вставлено из моего примера правила пропуска. Вам нужно изменить это значение на путь вашего Downloads папка.

  <Target Name="AddCustomSkipRules">
    <Message Text="Adding Custom Skip Rules" />
    <ItemGroup>
      <MsDeploySkipRules Include="SkipDownloadsFolder">
        <SkipAction>Delete</SkipAction>
        <ObjectName>filePath</ObjectName>
        <AbsolutePath>Downloads</AbsolutePath>
      </MsDeploySkipRules>
    </ItemGroup>
  </Target>

(2) Вы не можете использовать пользовательское правило пропуска при публикации из Visual Studio. Вы должны опубликовать с помощью MSBuild из командной строки. Суть моего вопроса заключалась в том, чтобы объединить удобство профиля публикации, управляемого в VS, с утилитой настраиваемого правила пропуска (для которого требуется командная строка), потому что в VS 2012, обновление 3, ограничение командной строки не имеет был отменен

Моя команда MSBuild выглядит так:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe My.Website.sln /p:Configuration=Release;DeployOnBuild=true;PublishProfile="Test Server - Web Deploy"

Если я пытаюсь опубликовать из VS 2012, я получаю следующую ошибку, хотя "-verb:sync" ясно виден в выходных данных:

2>Start Web Deploy Publish the Application/package to http://my.website.example.com/MSDEPLOYAGENTSERVICE ...
2>C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe 
  -source:manifest='C:\inetpub\wwwroot\My.Website\obj\Release\Package\My.Website.SourceManifest.xml' 
  -dest:auto,ComputerName='http://my.website.example.com/MSDEPLOYAGENTSERVICE',UserName='...',Password="...",IncludeAcls='False',AuthType='NTLM' 
  -verb:sync 
  -disableLink:AppPoolExtension 
  -disableLink:ContentExtension 
  -disableLink:CertificateExtension 
  -skip:skipaction='Delete',objectname='filePath',absolutepath='ErrorLog' 
  -skip:objectname='dirPath',absolutepath='obj\\Release\\Package\\PackageTmp\\App_Data$' 
  -skip:objectname='dirPath',absolutepath='MyWebsite/\\App_Data$' 
  -setParamFile:"C:\inetpub\wwwroot\My.Website\obj\Release\Package\My.Website.Publish.Parameters.xml" 
  -retryAttempts=2 
2>MSDEPLOY(0,0): Error : The verb must be specified by using the -verb argument.
2>MSDEPLOY(0,0): Error count: 1.
Другие вопросы по тегам