MSDeploy überspringt Regeln bei Verwendung von MSBuild PublishProfile mit Visual Studio 2012

Ich versuche, mit WebDeploy eine Website mit benutzerdefinierten MSDeploy-Überspringregeln und einem in Visual Studio 2012 gespeicherten Veröffentlichungsprofil zu veröffentlichen.

Ich verwende das Veröffentlichungsprofil über die Befehlszeile, aber die Überspringregel zum Überspringen des Löschens eines Ordners funktioniert nicht.

ich habe einErrorLog Unterordner in meiner Web-App mit einemweb.config Datei darin, um die richtigen Ordnerberechtigungen festzulegen. Ohne irgendwelche Sprungregeln kann dasErrorLog Ordner undweb.config Dateien werden normal veröffentlicht, aber alle vorhandenen Fehlerprotokolldateien im Ordner auf dem Server werden beim Veröffentlichen gelöscht.

Fehler mit<SkipAction>Delete</SkipAction>

Wenn ich eine benutzerdefinierte Sprungregel zu meiner hinzufügewpp.targets Datei akzeptiert die Überspringregel keinen Wert mehr für die<SkipAction> Element. Wenn ich setze<SkipAction>Delete</SkipAction>Ich erhalte den folgenden Fehler:

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]

Wenn ich das einfach weglasse<SkipAction> Element, dasErrorLog Der Ordner wird gelöscht, wenn er normalerweise veröffentlicht wird.

Wenn ich setze<SkipAction></SkipAction>wieder dieErrorLog Ordner wird beim Veröffentlichen gelöscht.

Wenn ich setze<KeyAttribute>Delete</KeyAttribute>, dannErrorLog und dasweb.config Datei werden normal veröffentlicht.

Meines Wissens nach müssen Sie MSBuild zum Verwenden benutzerdefinierter Überspringregeln über die Befehlszeile aufrufen, anstatt in VS 2012 zu veröffentlichen. Ich möchte jedoch weiterhin meine gespeicherten Veröffentlichungsprofile verwenden von VS 2012.

Meine MSBuild-Befehlszeile:

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

Meine.Website.wpp.Ziele:

<?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>

Meine MSBuild-Ausgabe zeigt die benutzerdefinierte Überspringregel an, löscht jedoch weiterhin die Dateien:

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.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage