MSDeploy omite las reglas al usar MSBuild PublishProfile con Visual Studio 2012

Estoy tratando de usar WebDeploy para publicar un sitio web utilizando las reglas de omisión de MSDeploy y un perfil de publicación guardado en Visual Studio 2012.

Tengo el perfil de publicación funcionando desde la línea de comandos, pero la regla de omisión para omitir la eliminación de una carpeta no funciona.

Yo tengo unErrorLog subcarpeta en mi aplicación web con unaweb.config archivo dentro de él para establecer los permisos de carpeta adecuados. Sin ninguna regla de salto, laErrorLog carpeta yweb.config los archivos se publican normalmente, pero todos los archivos de registro de errores existentes en la carpeta del servidor se eliminan en la publicación.

Error con<SkipAction>Delete</SkipAction>

Cuando agrego una regla de omisión personalizada a miwpp.targets archivo, la regla de omisión ya no acepta un valor para el<SkipAction> elemento. Si pongo<SkipAction>Delete</SkipAction>, Obtuve el siguiente error:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets(4377,5): error : Web deployment task failed. (Unrecognized skip directive 'skipaction'. Must be one of the following: "objectName," "keyAttribute," "absolutePath," "xPath," "attributes.<name>.") [C:\inetpub\wwwroot\My.Website\My.Website\My.Website.csproj]

Si simplemente omito el<SkipAction> elemento, elErrorLog carpeta se elimina cuando normalmente se publicaría.

Si pongo<SkipAction></SkipAction>, de nuevo, elErrorLog carpeta se elimina en la publicación.

Si pongo<KeyAttribute>Delete</KeyAttribute>, entoncesErrorLog y elweb.config Los archivos se publican normalmente.

Entiendo que para usar las reglas de omisión personalizadas, debe llamar a MSBuild desde la línea de comandos en lugar de publicar desde VS 2012. Sin embargo, me gustaría usar mis perfiles de publicación guardados, y entiendo que ahora es posible. de VS 2012.

Mi línea de comandos de MSBuild:

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

My.Website.wpp.targets:

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

  <Target Name="AddCustomSkipRules">
    <Message Text="Adding Custom Skip Rules" />
    <ItemGroup>
      <MsDeploySkipRules Include="SkipErrorLogFolder1">
        <SkipAction></SkipAction>
        <KeyAttribute>Delete</KeyAttribute>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_Escaped_WPPAllFilesInSingleFolder)\\ErrorLog$</AbsolutePath>
        <XPath></XPath>
      </MsDeploySkipRules>
    </ItemGroup>
  </Target>
</Project>

La salida de Mi MSBuild muestra la regla de omisión personalizada, pero sigue eliminando los archivos:

GenerateMsdeployManifestFiles:
  Generate source manifest file for Web Deploy package/publish ...
AddCustomSkipRules:
  Adding Custom Skip Rules
MSDeployPublish:
  Start Web Deploy Publish the Application/package to http://testserver.domain.com/MSDEPLOYAGENTSERVICE ...
  Starting Web deployment task from source: manifest(C:\inetpub\wwwroot\My.Website\My.Website\obj\Release\Package\My.Website.SourceManifest.xml) to Destination: auto().
  Deleting filePath (MyWeb/ErrorLog\test.txt).
  Updating setAcl (MyWeb/).
  Updating setAcl (MyWeb/).
  Updating filePath (MyWeb/ErrorLog\Web.config).
  Updating filePath (MyWeb/Web.config).
  Updating setAcl (MyWeb/).
  Updating setAcl (MyWeb/).
  Successfully executed Web deployment task.
  Publish is successfully deployed.

Respuestas a la pregunta(7)

Su respuesta a la pregunta