`
h416756139
  • 浏览: 365730 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WP7 的 BuildAction 之 Content 与 Resource

    博客分类:
  • WP7
 
阅读更多

很多初学Windows Phone 7开发的朋友经常因为资源文件的BuildAction属性设置不当而导致图片无法显示、多媒体文件无法访问之类的问题。在Windows Phone 7中,资源文件的BuildAction属性通常有Content/Resource/None三个可选值,那么究竟设置为哪一个才合适呢?下面我们就这一问题进行简单的探索。

WhichOneShouldIChoose
 

疑惑1:BuildAction属性设置为Content/Resource/None的资源有何区别?


这个问题我们通过一个简单的测试来解答。为了容易观察,我们选择两个较大的视频文件(每个10M左右)作为资源文件进行测试。

如图所示,我们添加两个视频文件video1.wmv、video2.wmv到项目中的Medias文件夹。

AddTwoVideoFiles

并分别设置其BuildAction属性为Content、Resource。

SetVideo1ToContentSetVideo2ToResource

按F6键编译项目。然后到项目的bin/Debug文件夹中找到编译生成的xap文件,将其后缀改为zip(对Silverlight有所了解的朋友应该清楚,一个Xap文件实际上就是一个zip压缩包)。

FindXapChangeExtentionName

用压缩软件打开该zip文件,在其中的Medias文件夹中将看到vedio1.wmv文件以独立文件的形式存在于压缩包中(右图)。

那么vieo2.wmv文件哪里去了呢?注意观察左图中DemoCode1.dll文件的大小---10M多!!!你猜的没错,vieo2.wmv就是被嵌入到了这个dll文件中。

OpenZip

那么设置为None的情况又是如何呢?实际上试过之后你会发现,设置为None的资源文件既不会直接打包在xap文件中,也不会嵌入xap中的dll内,编译过程会完全忽略该资源文件。那么以下的探讨中也将忽略BuildAction设置为None的情况。

那么通过以上测试我们可以总结如下:

  • BuildAction属性设置为Conten的文件将被作为独立文件直接打包在xap文件中
     
  • BuildAction属性设置为Resource的文件将被嵌入到xap包中的dll文件内
     
  • BuildAction属性设置为None的文件,将不会存以任何形式在于xap包中

疑惑2:BuildAction选择Content还是Resource?


根据目前的使用经验,简单总结如下。

多数情况下,两种形式都可以使用,但是以下情况使用Content更为便捷:

  • 一般情况下,使用Content时,资源文件的URI更为简洁,而Resource相对繁琐一些。

    • e.g.如video1.wmv文件通常可通过URI“/Medias/video1.wmv”访问,
      而video2.wmv则需要“[项目名];component/Medias/video1.wmv"访问(XAML中除外)
                
  • 由于使用Content时,文件是直接打包在项目中,因此对于需要批量打包生成xap文件的场景,只能用Content。
     
  • 对于多媒体文件,务必使用Content形式以取得更佳的性能。

    • MSDN文档原文
      “Media processing on Windows Phone 7 is optimized to use files and network streams, but not in-memory streams. This means that any media files included in the application, such as sound effects, should have their Build Action set to Content and notResource.”
      “Windows Phone 上的多媒体处理针对文件和网络流做了优化,而内存流没有。这就意味着包含在应用程序中任何媒体文件,如声音效果等,应该设置其BuildAction属性为Content而不是Resource。”
       
    • 更详细解释参考WPMind的WP7 Dev 101 【7】 选择BuildAction
                

对于以下场景,使用Resource可能更合适:

  • 需要避免异步加载的资源文件应当使用Resource

    • e.g.一个典型的场景是Panorama控件的背景图片,如果设置为Content在首次显示页面时会有闪烁。MSDN文档原文
      “If a Panorama control is using an image for the background, its Build Action should be set to Resource; otherwise, it will not appear immediately when the application is first displayed. Setting the Build Action to Content would cause it to be loaded asynchronously.”
      “如果Panorama 控件使用图片作为背景,其BuildAction属性应当色号之为Resource;否则,当应用程序手册显示时图片将不会立即呈现。将BuildAction设置为Content属性会导致其异步加载。”
       
    • 很多用作背景的图片都和上例相仿

  • 使用Resource可以比Content更好的保护自己Xap包中的资源文件(如自己辛苦设计的图片等)。

    • 这很容易理解,因为Content时资源文件直接以文件形式存在于Xap包中,别人拿到Xap解压后也就拿到了你的资源文件。而Resource时嵌入在dll文件中,获取相对麻烦些(但也不是完全安全)。

  • 需要从C#代码中动态访问的资源文件(如XML文件等),需要设置为Resource。欲了解详情请参考下一课介绍的场景。

扩展知识


实际上,不仅是资源文件可以设置BuildAction属性,VS项目中的所有文件都有BuildAction属性,如xaml文件、cs文件等,只是一般情况下我们不需要改动这些文件的BuildAction属性而已。点此了解更多BuildAction相关介绍。

分享到:
评论

相关推荐

    刷机工具wp7

    WP7,全称为Windows Phone 7,是微软公司推出的一款智能手机操作系统,主要针对移动设备市场。在WP7系统中,为了提升设备性能、解决软件问题或安装特定版本的系统,用户有时需要对手机进行“刷机”,即更新或更换...

    wp7工具集wp7工具集

    标题"wp7工具集wp7工具集"表明这是一组针对Windows Phone 7(WP7)平台的开发和管理工具。这个集合可能包含了多种实用工具,帮助开发者和用户更好地理解和操作WP7设备。 描述中提到了几个具体的工具: 1. **xap12...

    wp7样式代码

    【标签】:“wp7样式”标签表明了这个压缩包中的内容与Windows Phone 7应用程序的样式设计相关。这可能包括各种预定义的样式模板、示例代码以及如何自定义和扩展这些样式的指导。 【压缩包子文件的文件名称列表】:...

    wp7手机 usb

    标题中的“wp7手机 usb”指的是Windows Phone 7操作系统与USB设备交互的功能,特别是将WP7手机用作便携式存储设备,类似于U盘。在Windows Phone 7系统中,用户可以通过特定的软件来启用这一功能,使得手机可以连接到...

    WP7-HelloPhone

    4. **事件处理**:在WP7应用中,事件处理是与用户交互的核心。例如,"HelloPhone"可能有一个按钮,当用户点击该按钮时,会触发一个事件,执行特定的代码逻辑。 5. **页面导航**:WP7应用通常包含多个页面,学习如何...

    wp7应用软件安装

    安装ZUNE并确保它与你的WP7设备正确连接。 4. **Tom XAP Installer**:这是一个第三方工具,允许你在未通过Marketplace的途径安装XAP格式的应用。但请注意,这个工具需要你的WP7手机已经解锁。解锁工具如ChevronWP7...

    WP7 codeproject app .zip

    【标签】"WP7 codeproject app" 是这个压缩包的关键标识,表明了这个项目的两个核心要素:它是一个WP7应用程序,并且与CodeProject社区有关。这可能意味着该应用可能是展示如何在Windows Phone 7设备上使用特定技术...

    开源中国WP7版源码

    开源中国WP7版源码是针对Windows Phone 7平台开发的一款应用程序,它的源代码完全开放,可供开发者学习、研究和贡献。开源中国的这个版本旨在为WP7用户提供一个方便的社区互动平台,包括浏览新闻、参与讨论、查看...

    wp7官方教程(附带实例源码)

    第9章“应用软件生命周期与导航”会详细阐述如何处理应用的启动、暂停、恢复和关闭状态,这是每个WP7应用开发者必须掌握的关键知识。同时,应用间的导航机制也是开发者需要理解的重要部分,它关乎用户体验和程序的...

    WP7查询IP所在地

    在Windows Phone 7(简称WP7)平台上,开发一个应用来查询IP地址所在的位置是一项实用的功能。这涉及到网络编程和地理定位技术的结合。本文将深入探讨如何在WP7环境中实现这一功能,主要关注以下几个方面:网络请求...

    C# Sqlite For WP7

    本文将深入探讨如何使用C#与SQLite在WP7平台上进行数据库操作。 首先,我们来理解SQLite的核心概念。SQLite是一个嵌入式数据库,它不需要独立的服务器进程,而是直接在应用程序内部运行。这使得SQLite特别适合于...

    WP7小计算器

    **WP7小计算器详解** Windows Phone 7(简称WP7)是由微软开发的一款智能手机操作系统,其界面设计风格独特,以“动态磁贴”为特点,提供了丰富的应用生态。"WP7小计算器"是一款专为此平台设计的基础计算工具,旨在...

    WP7 Update Cab Sender

    **WP7 Update Cab Sender** 是一个专为Windows Phone 7设备设计的离线推送升级工具。这个工具的主要目的是帮助用户在没有互联网连接或者网络环境不稳定的情况下,为他们的WP7设备安装系统更新或应用升级包。它通过...

    wp7游戏程序部署工具最新版

    国内最新的wp7游戏程序部署工具,简单大气的界面可以与微软的zune相媲美,使用起来却比zune方便多了。这个最新版的轻量级的工具可以方便地搜索、下载和拖曳的方式部署任何的.xap程序。只要你的wp7手机是破解了的,就...

    WP7-我的时钟应用

    【WP7-我的时钟应用】是一个专门为Windows Phone 7(简称WP7)平台设计的应用程序,它聚焦于提供时间管理与提醒功能。这个小程序旨在为用户带来方便、直观的时钟体验,同时也为开发者提供了学习和研究WP7平台开发的...

    wp7商店发布流程

    ### wp7商店发布流程 #### 一、概述 随着Windows Phone 7(简称WP7)平台的推出,开发者有了一个新的舞台来展示他们的创意和技术能力。本文将详细介绍如何将一款WP7应用从开发环境成功提交至WP7商店的过程,并提供...

    C# WP7计算器 需要的可以参考下

    【C# WP7计算器】是基于C#编程语言和Windows Phone 7(WP7)平台开发的一款计算器应用。这个项目对于学习C#编程以及WP7应用程序开发的开发者来说,提供了宝贵的参考价值。以下是对该计算器应用及其开发相关知识点的...

    人人网wp7示例

    人人网WP7示例是基于Windows Phone 7平台的一个开发示例,主要目的是帮助开发者集成人人网SDK 2.0,以便在他们的应用程序中实现与人人网的深度交互。这个示例代码集提供了详细的实现方法,让开发者可以轻松地将登录...

Global site tag (gtag.js) - Google Analytics