Я пытаюсь использовать WebDeploy для публикации веб-сайта с использованием настраиваемых правил пропуска MSDeploy и профиля публикации, сохраненного в Visual Studio 2012.
У меня профиль публикации работает из командной строки, но правило пропуска для пропуска удаления папки не работает.
У меня есть подпапка ErrorLog
в моем веб-приложении с файлом web.config
внутри, чтобы установить правильные разрешения для папки. Без каких-либо правил пропуска папка ErrorLog
и файл web.config
публикуются нормально, но все существующие файлы журнала ошибок в папке на сервере удаляются при публикации.
Ошибка с <SkipAction>Delete</SkipAction>
Когда я добавляю настраиваемое правило пропуска в свой wpp.targets
файл, правило пропуска больше не принимает значение для элемента <SkipAction>
. Если я установил <SkipAction>Delete</SkipAction>
, я получаю следующую ошибку:
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]
Если я просто опущу элемент <SkipAction>
, папка ErrorLog
будет удалена, когда она обычно публикуется.
Если я устанавливаю <SkipAction></SkipAction>
, папка ErrorLog
удаляется при публикации.
Если выставить <KeyAttribute>Delete</KeyAttribute>
, то ErrorLog
и файл web.config
публикуются нормально.
Насколько я понимаю, для использования настраиваемых правил пропуска вам необходимо вызвать MSBuild из командной строки вместо публикации из VS 2012. Я все же хотел бы использовать свои сохраненные профили публикации, и я понимаю, что теперь это возможно, поскольку VS 2012.
Моя командная строка 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>
Мои выходные данные MSBuild, показывающие настраиваемое правило пропуска, но все еще удаляющие файлы:
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.