【问题标题】:How to exclude files from .xap for specific build configurations如何从 .xap 中排除特定构建配置的文件
【发布时间】:2015-03-27 14:26:26
【问题描述】:

在 WP8 项目的开发过程中,我使用 .json 文件作为数据源。 这些文件的构建操作设置为内容。
在构建生产版本时,出于安全原因,我想从生成的 .xap 文件中排除这些文件(因为它就像所有 Web 服务的蓝图)。

构建前和构建后事件没有用,因为 .xap 文件是在构建期间生成的。由于 xap 在技术上是 zip,因此我可以使用带有自定义工具的构建后事件来提取、删除和重新打包它,但我想避免这种情况。

我还可以将 Condition 参数应用于 .csproj 文件中的每个 json 文件:

<Content Condition="'$(Configuration)' == 'Debug'" Include="DesignData\authentication\testservice.json">
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>

但由于有 +100 个文件,这似乎也是一个次优解决方案,无需创建另一个自定义工具来完成这项工作并保持 csproj 文件更新。

我终于发现我可以在 xap 打包之前执行一个目标,但是当我通过以下方式删除目录时打包失败:

<PropertyGroup>
  <FilesToXapDependsOn>$(FilesToXapDependsOn);AfterFilesToXapDependsOn</FilesToXapDependsOn>
</PropertyGroup>
<Target Name="AfterFilesToXapDependsOn">
  <RemoveDir Directories="$(TargetDir)/DesignData" />
</Target>

【问题讨论】:

  • 构建过程(或者,您如何)知道您希望排除哪些文件?
  • 我只是想排除所有 json 文件打包在 xap 文件中以进行发布构建。所以我想排除整个文件夹,或者所有带有 json 扩展名的文件。

标签: visual-studio windows-phone-7 windows-phone-8 msbuild windows-phone


【解决方案1】:

您需要从 MSBuild 在创建 .xap 文件时使用的 Item 集合中删除要排除的文件。如果你只是删除目录,你会得到错误,因为 MSBuild 仍然希望文件在那里。

至少在 Microsoft.WindowsPhone.Common.targets 的 8.1 版中,您可能想要的目标似乎需要位于AssignTargetPathsDependsOn

<PropertyGroup>
  <AssignTargetPathsDependsOn>$(AssignTargetPathsDependsOn);RemoveJsonFiles</AssignTargetPathsDependsOn>
</PropertyGroup>
<Target Name="RemoveJsonFiles">
  <ItemGroup>
    <Content Condition=" '$(Configuration)' == 'Release' " Remove="**\*.json" />
  </ItemGroup>
</Target>

如果此扩展点不适合您,您可能必须找到其他更好的扩展点来添加您的目标。

如您所见,要尝试的另一件事是名为Content 的项目的Remove 属性。此属性仅适用于 ItemGroup 元素内的项目 Target 元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多