跳过规则不起作用

时间:2015-10-15 07:27:16

标签: .net msbuild msdeploy

我已根据此post编辑了我的csproj文件,但无论如何都会删除App_data中的额外文件。 另一方面,当我按照帖子中所示修改msdeploy命令时,将应用跳过。

我正在使用web deploy v3。命令是

msdeploy.exe" -verb:sync -source:package=c:\builds\app.zip -dest:auto -setParam:"IIS Web Application Name"="Default Web Site/app"

是否有调试可能导致此行为的原因?

  <PropertyGroup>    <OnBeforePackageUsingManifest>AddCustomSkipRules</OnBeforePackageUsingManifest>
  </PropertyGroup>

<Target Name="AddCustomSkipRules">
    <ItemGroup>
      <MsDeploySkipRules Include="SkipDeleteAppData">
        <SkipAction>Delete</SkipAction>
        <ObjectName>filePath</ObjectName>
        <AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipDeleteAppData">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
    </ItemGroup>
  </Target>

1 个答案:

答案 0 :(得分:2)

我一直在审核Microsoft.Web.Publishing.targets,看起来这已经实现了,您需要做的就是将此属性添加到您的MsBuild脚本中:

<PropertyGroup>
    <SkipApp_DataFolder>True</SkipApp_DataFolder>
</PropertyGroup>

如果从msbuild命令行运行,则可以使用:

msbuild MyProject.csproj /p:SkipApp_DataFolder=True ...

更新:

你可能想尝试这个,把这个代码放在你的MsBuild文件的底部,在任何&#34;导入&#34;之后。标记:

  <Target Name="GenerateSkipRuleForAppData">
    <EscapeTextForRegularExpressions Text="$(_PackageTempDir)">
      <Output TaskParameter="Result" PropertyName="_Escaped_PackageTempDir" />
    </EscapeTextForRegularExpressions>
    <ItemGroup>
      <MsDeploySkipRules Include="SkipAddDataOnDeploy">
        <SkipAction></SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data$</AbsolutePath>
        <XPath></XPath>
      </MsDeploySkipRules>
    </ItemGroup>
  </Target>

这是&#34; GenerateSkipRuleForAppData&#34;的完全副本。没有条件的Microsoft.Web.Publishing.targets中的目标(似乎条件不能正常工作),这将覆盖原始目标并强制执行它而不破坏目标的逻辑。