MSDeploy pomiń reguły podczas korzystania z MSBuild PublishProfile w Visual Studio 2012

Próbuję użyć WebDeploy do opublikowania strony internetowej przy użyciu niestandardowych reguł pominięcia MSDeploy i profilu publikowania zapisanego w Visual Studio 2012.

Mam profil publikowania działający z wiersza poleceń, ale reguła pomijania, aby pominąć usuwanie folderu, nie działa.

mamErrorLog podfolder w mojej aplikacji internetowej za pomocąweb.config plik wewnątrz, aby ustawić odpowiednie uprawnienia folderu. Bez żadnych reguł pomijaniaErrorLog folder iweb.config plik jest publikowany normalnie, ale wszystkie istniejące pliki dziennika błędów w folderze na serwerze są usuwane po opublikowaniu.

Błąd z<SkipAction>Delete</SkipAction>

Po dodaniu niestandardowej reguły pomijania do mojegowpp.targets plik, reguła pominięcia nie akceptuje już wartości dla<SkipAction> element. Jeśli ustawię<SkipAction>Delete</SkipAction>, Pojawia się następujący błąd:

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]

Jeśli po prostu pominę<SkipAction> elementErrorLog folder zostanie usunięty, gdy normalnie zostanie opublikowany.

Jeśli ustawię<SkipAction></SkipAction>, znowu,ErrorLog folder zostanie usunięty po opublikowaniu.

Jeśli ustawię<KeyAttribute>Delete</KeyAttribute>, następnieErrorLog iweb.config plik jest publikowany normalnie.

Rozumiem, że aby korzystać z niestandardowych reguł pomijania, należy zadzwonić do MSBuild z linii poleceń zamiast publikować z VS 2012. Chciałbym jednak nadal korzystać z zapisanych profili publikacji i rozumiem, że jest to teraz możliwe jako VS 2012.

Moja linia poleceń 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>

Moje wyjście MSBuild wyświetla niestandardową regułę pomijania, ale nadal usuwa pliki:

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.

questionAnswers(7)

yourAnswerToTheQuestion