我正在尝试使用 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.