跳过规则不起作用
问题描述:
我已经根据此post编辑了我的csproj文件,但App_data中的额外文件将被删除。 另一方面,当我修改msdeploy命令(如帖子中所示)时,会应用跳过。跳过规则不起作用
我正在使用web部署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>
答
我一直在检讨的Microsoft.Web.Publishing.targets,它看起来像这已经实现,所有你需要做的就是这个属性添加到您的MSBuild脚本:
<PropertyGroup>
<SkipApp_DataFolder>True</SkipApp_DataFolder>
</PropertyGroup>
如果您是从的MSBuild命令行运行,您可以使用:
msbuild MyProject.csproj /p:SkipApp_DataFolder=True ...
UPDATE:
你可能想试试这个,把这个代码在你的MSBuild文件的底部,之后的任何“进口”标签:
<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>
这是Microsoft.Web了“GenerateSkipRuleForAppData”目标的精确副本。没有条件的发布。目标(似乎条件工作不正常),这将覆盖原始目标,并应该强制执行它而不会中断目标的逻辑。
不,它不工作。在IIS中的应用程序导入时,这些文件将从App_data中删除。 – user49126
我甚至在构建输出中找到了SkipApp_DataFolder = True – user49126