WPF中的应用程序数据文件和Pack URI详解

总目录



一、应用程序数据文件

1、概述

WPF中的需要使用的文件文件有XAML,图像,视音频等,对于这类文件,WPF中称之为应用程序数据文件,该文件主要包含以下三类数据文件类型:

  • 资源文件:编译到可执行的(exe)或库 (dll)内的数据文件。
  • 内容文件:与可执行 WPF 程序集具有显式关联的独立数据文件。
  • 源站点文件:与可执行 WPF 程序集没有关联的独立数据文件。

这三种类型的文件之间的一个重要区别是:资源文件和内容文件在生成时即为程序集所知;程序集明确知道它们的存在。 但对于源站点文件,程序集可能完全不知道它们的存在,或者通过包统一资源标识符 (URI) 引用隐式知道它们的存在;在后一种情况下,不能保证被引用的源站点文件实际存在。

为了引用应用程序数据文件,WPF 使用包统一资源标识符 (URI) 方案。

2、详解

1、资源文件

如果应用程序数据文件必须始终可供某个应用程序使用,那么保证可用性的唯一方法是将其编译到应用程序的主可执行程序集内,或者它所引用的程序集内。 这种类型的应用程序数据文件称为“资源文件”。

应在以下情况下使用资源文件:

  • 将资源文件编译到程序集内之后,无需更新资源文件的内容。
  • 希望通过减少文件依赖项的数量来简化应用程序分发的复杂性。
  • 应用程序数据文件必须是可本地化的

2、内容文件

内容文件作为松散文件与可执行程序集一起分发。 虽然它们不编译到程序集内,但编译程序集时所使用的元数据建立了与每个内容文件的关联。

如果应用程序需要一组特定的应用程序数据文件,并且你希望能够更新这些文件,而无需重新编译使用它们的程序集,应使用内容文件。

若要将内容文件添加到项目中:
1 必须将应用程序数据文件作为 Content 项包含在其中。(将文件做【包含在项目】中的操作)
2 设置文件属性,生成操作 选【资源】
3 此外,由于内容文件不直接编译到程序集内,因此需要设置 【复制到输出目录】,以指定将内容文件复制到一个相对于生成程序集的位置。
在这里插入图片描述

  • 一般可能不需要第一步,大多数文件都是已包含在项目中
  • 如果需要将文件设置为资源文件,只需将生成操作设置为 资源,复制到输出目录 为 无

3、源站点文件

资源文件与同其一起分发的程序集具有显式关系但是,有些情况下可能需要在程序集和应用程序数据文件之间建立隐式关系或不存在的关系,这些情况包括:

  • 编译时文件不存在。
  • 在运行之前不知道程序集将需要哪些文件。
  • 希望能够更新文件,无需重新编译与这些文件关联的程序集。
  • 应用程序使用大型数据文件(如音频和视频),并且你希望仅在用户选择下载时才下载这些文件。

源站点文件不会与 XAML 浏览器应用程序 (XBAP) 一起缓存在客户端计算机上,而内容文件却会如此。 因此,只有在专门请求下载源站点文件时,才会下载它们。 如果 XAML 浏览器应用程序 (XBAP) 应用程序具有大型媒体文件,则将这些文件配置为源站点文件意味着应用程序初始启动更快,并且这些文件只会按需下载。

3、小结

简单讲:就是程序中一些基本不需要做改动的数据文件,可以将这类数据文件作为资源文件;如果我们程序中的某些文件,需要时常更新,但是更新后不需要重新编译程序,可以将这类文件作为内容文件;

二、Pack URI

1.概述

Pack URI包含两个组件:授权和路径。 以下是 pack URI 的格式。
pack://authority/path
authority 指定包含部件的包的类型(application或siteoforigin),而 path 指定部件在包内的位置。

WPF 支持两种授权:application:/// 和 siteoforigin:///。 application:/// 授权标识在编译时已知的应用程序数据文件,包括资源文件和内容文件。 siteoforigin:/// 授权标识源站点文件。 下图显示了每种授权的范围。
在这里插入图片描述

2、使用Pack URI

1、xaml中的绝对 pack URI

在这里插入图片描述
下面的示例演示了一个 XAML 资源文件的 pack URI,该资源文件位于所引用程序集的项目文件夹的根目录中。

pack://application:,/ReferencedAssembly;component/ResourceFile.xaml

下面的示例演示了一个 XAML 资源文件的 pack URI,该资源文件位于所引用程序集的项目文件夹的子文件夹中。

pack://application:,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml

下面的示例演示了一个 XAML 资源文件的 pack URI,该资源文件位于特定于版本的引用程序集的项目文件夹的根文件夹中。

pack://application:,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml

下面的示例演示了一个 XAML 内容文件的 pack URI,该内容文件与可执行程序集位于相同的文件夹中。

pack://application:,/ContentFile.xaml

下面的示例演示了一个 XAML 内容文件的 pack URI,该内容文件位于某个相对于应用程序的可执行程序集的子文件夹中。

pack://application:,/Subfolder/ContentFile.xaml

下面的示例演示了一个 XAML 源站点文件的 pack URI,该源站点文件存储在可执行程序集的启动位置。

pack://siteoforigin:,/SiteOfOriginFile.xaml

下面的示例演示了一个 XAML 源站点文件的 pack URI,该源站点文件存储在相对于应用程序可执行程序集的启动位置的子文件夹中。

pack://siteoforigin:,/Subfolder/SiteOfOriginFile.xaml

2、xaml中的相对 pack URI

在这里插入图片描述

3、代码中的绝对 pack URI

在这里插入图片描述

4、代码中的相对 pack URI

在这里插入图片描述

3、常见应用场景

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


结语

以上就是本文的内容,希望以上内容可以帮助到您,如文中有不对之处,还请批评指正。


参考资料
WPF 应用程序资源、内容和数据文件
WPF 中的 Pack URI

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值