如何从.xap中排除特定构建配置的文件

时间:2015-03-27 14:26:27

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

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

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

我还可以将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>

1 个答案:

答案 0 :(得分:1)

您需要从创建.xap文件时MSBuild使用的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>

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

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