我已经根据此 post 编辑了我的 csproj 文件,但App_data中多余的文件无论如何都会被删除。 另一方面,当我如帖子中所示修改 msdeploy 命令时,将应用跳过。
我正在使用网络部署 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 ...
更新:
您可能想尝试一下,请将此代码放在 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.Publishing.targets 的“GenerateSkipRuleForAppData”目标的精确副本,没有条件(似乎条件无法正常工作),这将覆盖原始目标并应强制执行它,而无需打破目标的逻辑。
关于.net - 跳过规则不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33142393/