我已根据此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>
答案 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中的目标(似乎条件不能正常工作),这将覆盖原始目标并强制执行它而不破坏目标的逻辑。