如何针对特定构建配置从 .xap 中排除文件
How to exclude files from .xap for specific build configurations
我在 WP8 项目的开发过程中使用 .json 文件作为数据源。
这些文件的构建操作设置为内容。
当我构建生产版本时,出于安全原因,我想从生成的 .xap 文件中排除这些文件(因为它就像所有网络服务的蓝图)。
Pre- 和 post-build 事件没有用,因为 .xap 文件是在构建期间生成的。由于 xap 在技术上是一个 zip,我可以使用 post 构建事件和自定义工具来提取、删除和重新打包它,但我想避免这种情况。
我还可以将 Condition 参数应用于 .csproj 文件中的每个 json 文件:
<Content Condition="'$(Configuration)' == 'Debug'" Include="DesignData\authentication\testservice.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
但是由于有 +100 个文件,这似乎也是一个次优的解决方案,无需创建另一个自定义工具来完成这项工作并保持 csproj 文件的更新。
终于发现可以在xap打包前执行一个target,但是删除目录后打包失败:
<PropertyGroup>
<FilesToXapDependsOn>$(FilesToXapDependsOn);AfterFilesToXapDependsOn</FilesToXapDependsOn>
</PropertyGroup>
<Target Name="AfterFilesToXapDependsOn">
<RemoveDir Directories="$(TargetDir)/DesignData" />
</Target>
您需要从 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
属性。此 属性 仅适用于 Target
个元素中的 ItemGroup
个元素中的项目。
我在 WP8 项目的开发过程中使用 .json 文件作为数据源。
这些文件的构建操作设置为内容。
当我构建生产版本时,出于安全原因,我想从生成的 .xap 文件中排除这些文件(因为它就像所有网络服务的蓝图)。
Pre- 和 post-build 事件没有用,因为 .xap 文件是在构建期间生成的。由于 xap 在技术上是一个 zip,我可以使用 post 构建事件和自定义工具来提取、删除和重新打包它,但我想避免这种情况。
我还可以将 Condition 参数应用于 .csproj 文件中的每个 json 文件:
<Content Condition="'$(Configuration)' == 'Debug'" Include="DesignData\authentication\testservice.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
但是由于有 +100 个文件,这似乎也是一个次优的解决方案,无需创建另一个自定义工具来完成这项工作并保持 csproj 文件的更新。
终于发现可以在xap打包前执行一个target,但是删除目录后打包失败:
<PropertyGroup>
<FilesToXapDependsOn>$(FilesToXapDependsOn);AfterFilesToXapDependsOn</FilesToXapDependsOn>
</PropertyGroup>
<Target Name="AfterFilesToXapDependsOn">
<RemoveDir Directories="$(TargetDir)/DesignData" />
</Target>
您需要从 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
属性。此 属性 仅适用于 Target
个元素中的 ItemGroup
个元素中的项目。