【问题标题】:Visual Studio packs into WP8 XAP unnecessary XML doc filesVisual Studio 将不必要的 XML doc 文件打包到 WP8 XAP 中
【发布时间】:2013-01-28 18:03:35
【问题描述】:

如果您在 Visual Studio 中创建 Windows Phone 8 应用程序并使用从 nuget 或手动提供的 XML 文档文件引用任何库,Visual Studio 也会自动将这些 XML 文件打包到输出 XAP 中。

在我们的例子中,Visual Studio 的这种奇怪行为几乎将 XAP 大小增加了两倍。 (我们总共有 8Mb 的 xml 文档。)

WP7 应用项目不存在这样的问题。

如何通过强制 Visual Studio 不打包不必要的文档文件来减小 xap 文件的大小?

2013 年 2 月 14 日更新:

重现问题的步骤:

  1. 使用 Visual Studio 创建 Windows Phone 8 应用项目
  2. 使用 NuGet 包管理器参考“反应式扩展 - 主库”
  3. 构建解决方案
  4. 转到 Bin 文件夹并解压缩 XAP 存档

你会发现有很多不必要的 XML doc 文件,比如“System.Reactive.Core.xml”

我相信这是一个安全问题,因为如果您为您的项目(或解决方案中的其他项目)启用 XML 文档生成,这些 XML 文档也会被打包到 XAP 中——当任何人都可能将 cmets 读给您的代码。

【问题讨论】:

  • 你能指定使用什么 NuGet 包会发生这种情况吗?
  • 响应式扩展 - 例如主库。
  • 也看到了,觉得这和WP7和WP8的MSBuild脚本的差异有关,有机会我会努力挖掘这个的!
  • 从 System.Reactive.Core.xml 读取 cmets 到您的代码?

标签: .net visual-studio visual-studio-2012 windows-phone-8 xap


【解决方案1】:

2013 年 2 月 20 日更新

正如@A-student 在 cmets 中指出的那样,我之前的解决方案会强制您在解决方案中的每个项目中添加 MSBuild 内容。

这个只需要你在实际有XAP/APPX文件输出的项目上输入:

<PropertyGroup>
  <FilesToXapDependsOn>$(FilesToXapDependsOn);AfterFilesToXapDependsOn</FilesToXapDependsOn>
</PropertyGroup>
<Target Name="AfterFilesToXapDependsOn">
  <ItemGroup>
    <FilteredPackagingOutputs Remove="@(FilteredPackagingOutputs)" Condition="'%(FilteredPackagingOutputs.OutputGroup)' == 'CopyLocalFilesOutputGroup' AND '%(FilteredPackagingOutputs.Extension)' == '.xml'" />
  </ItemGroup>
</Target>

这有点小技巧,应该小心使用(现在不确定这可能会产生什么影响),但目前看来可以完美地完成这项工作!

【讨论】:

  • 感谢您的回复。我已经测试了您的解决方案,发现 XML 文档文件已从输出目录中删除,但仍被打包到 XAP 中:(
  • 目前上述解决方案似乎在 WP8 和 Win8 应用程序中都运行良好,您能否提供您的示例项目供我测试?你在使用 Visual Studio Express 吗?
  • 请确保您确实对解决方案进行了干净+构建(或重建)!如果没有其他方法,请直接与我联系(我的个人资料中的联系人)
  • @Pedro 在更深入地调查了这个问题之后,我发现应该修改 VS 解决方案中的每个 WP8 项目文件(不仅仅是主要的)——这对我有帮助。非常感谢您所做的工作!
  • 很高兴看到解决方案。我认为这是每个 WP8/W8 应用开发者都必须知道的实际问题。可能商店中的每个 WP8/W8 应用程序的大小都已经超出了应有的大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多