`
h416756139
  • 浏览: 359194 次
  • 性别: 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工具集

    wp7工具集,xap12安装器,taskviewer任务查看器,AdvancedExplorer资源浏览器,WP7Booster优化器,wp7sdk_mini

    刷机工具wp7

    wp7三星i8350刷机工具,不会用啊,有会用的大侠介绍一下啊。。

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

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

    WP7开发电子书

    wp7高级编程中文版,有助于爱好wp7开发者,轻松学习,好好看吧

    wp7截图工具

    wp7截图工具

    WP7 下载文件

    这个是一个WP7 下载文件的源码,windows phone不提供浏览目录的功能,所以想在程序里写浏览并上传的同学,放弃这个想法吧。我也走了很多弯路,才知道。 另外声明下:小弟传了一个Windows Phone 7高级编程中文版的,...

    怎样把一个wp7的工程迁移到wp8上

    怎样把一个wp7的工程迁移到wp8上怎样把一个wp7的工程迁移到wp8上

    传智播客.Net培训WP7(windows phone7)模拟器20110417版

    “传智播客.Net培训WP7模拟器”(20110417版)的优点如下: 1)可以运行在windows xp下 2)实现了WP7绝大部分API。包括启动器、选择器、外设(收音机、GPS、振动器、麦克风、摄像头、加速度感应器)、WP7特殊控件...

    WP7 SDK精简版

    此SDK是精简版本的WIN7 WP7 SDK工具,仅2.8M。没有实用工具,部署可用 TOM

    WP7 破解-ChevronWP7

    ChevronWP7 破解 WP7 中文版,比较好。大家试试看吧。

    wp7手机 usb

    wp7手机软件,可以把wp7手机变成U盘,解压后直接打开。

    ZTE N880E WP7驱动

    ZTE N880E WP7驱动,刷wp7必备驱动

    WP7小计算器

    一个小WP7计算器加点小地图,试上传。Wp7,看好的是未来。

    WP7查询IP所在地

    WP7查询IP所在地

    wp7后台开发实例

    一个wp7后台线程实现的实例,可用vs2010直接打开,供wp7开发者参考

    WP7 codeproject app .zip

    WP7 codeproject app .zip

    wp7商店发布流程

    wp7开发必备,发布应用到商店的流程,图解

    开源中国WP7版源码

    开源中国WP7版源码使用简介https://github.com/oschina/wp7-app

    WP7手机工具

    wP7应用工具,主要是用来部署软件的,希望能有用。

    WP7 3Mktplace v0.6.4

    WP7 3Mktplace v0.6.4,可以下载WP市场的所有免费或收费的应用。 下载后可以破解收费软件。

Global site tag (gtag.js) - Google Analytics