• Silverlight中文件的Build Action(生成方式)


    在Silverlight中需要经常和Build Action打交道,没办法,谁让Silverlight的程序打包好是一个XAP文件呢,问题来了,我们可以选择文件是包含在XAP中,或者在XAP的旁边(即和XAP是同一个目录),因为这样取决于XAP下载速度的快慢以及访问文件时候路径的差异,下面看看分别设置这几种方式。

    在看设置Build Action之前先看下,设置Copy to Output Directory(如何复制文件到生成目录,个人感觉这个和访问文件的路径没有什么关系)的设置:

    资源文件的 Copy to OutPut Directory 属性,这个属性有如下三个选项:

    Action

    说明

    备注

    Do not copy

    不做数据同步

    Copy always

    每次都会被同步过去

    Copy if newer

    当有新版本存在时,才会被同步过去

    1.默认的Image文件属性

    在Silverlight程序(非web端)添加Image文件之后属性的默认设置就是这样的,这样的话Image不会出现在Xap中,同时也不会出现在Xap的一旁,而是作为资源文件存在,

    这时候访问我们可以使用相对路径来操作(切忌使用/,因为这个是绝对的路径,可以使用 不带 /或者使用../的方式),例如 Images/2.jpg或者../Images/2,jpg

    2.修改Build Action 为content,这时候Image会出现在Xap中,这时候使用时候路劲发生了变化,由于Image存在Xap中,所以使用绝对路径来访问,例如

    /Images/1.jpg

    3.修改BuildAction为None(访问方式和content的类似),设置Copy to Output Directory为Copy always(或者copy if newer)则会复制文件到和Xap同一目录的文件夹

    下面是详细的Build Action对照表

    Action

    说明

    None

    资源既不会被集成到程序集内,也不会打包到xap包中。不过我们可以通过设置CopyToOutputDirectory选项让其自动拷贝到xap包所在目录。 这种情况下, 访问这个图片的相对Uri需要以"/"开始。 

    适用场景:在大多数情况下,我们希望把video/audio文件放到xap的外面,因为这种文件一般都比较大,会影响silverlight应用的加载,而且一般的视频音频文件都是压缩格式的,放到xap中也不会起到减少他们文件大小的作用。 类似图片视频这种资源文件生成操作为None时和他们没有被添加到项目里是一样的,都可以用绝对Uri进行引用。

    Compile

    不适合用于资源文件。类文件要用"Compile"生成操作, 就是指项目里.cs或.vb文件。

    Content

    资源会被打包在Xap包里面。这种情况下, 访问这个图片的相对Uri需要以"/"开始。在这种方式下,如果没有在xap中找到图片文件,那么silverlight会自动从当前xap应用所在的文件夹下来找所需图片文件, 如果还没有找到那么就触发ImageFailed事件, 这种方式比较适合在多个程序集引用相同文件时采用。

    Embedded Resource

    这种方式会把文件嵌入到程序集中,Silverlight无法通过Uri引用在xaml和C#里对这个文件进行使用,微软不建议在Silverlight采用这种方式在程序集里嵌入资源。如果有这种需求可以用Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(string path)相关的方法得到文件的Stream引用。

    ApplicationDefinition

    Silverlight程序的入口xaml文件(默认就是App.xaml)应该设置为这个"应用定义"。其他文件都不适合用这个。

    Page

    不适合用于资源文件。所有的用户控件,页面和子窗体(Usercontrol/Page/Childwindow)的xaml文件应该采用的生成操作。 如果改为别的方式那么会导致后台对应的代码文件无法链接到这个xaml文件。 采用"Page" build action时xaml里的错误会导致工程无法正确生成。

    CodeAnalysisDictionary

    代码分析使用,Silverlight中可以忽略

    Resource

    资源会被打包在程序集内部。 选择这种生成方式后,该资源文件会被嵌入到该应用的程序集中,就是说打开生成的xap是看不到这个文件的。 可以用相对于当前的XAML文件的相对Uri访问,<Image Source="sl.png" />或是<Image Source="./sl.png" />, 在子文件夹里的可以用<Image Source=”./images/sl.png” />访问到。最保险的方式是采用特有的程序集资源URI访问,格式为 <Image Source="/{assemblyShortName};component/sl.png"/>,这种方式还可以引用到xap中的其他程序集中的图片。这种生成方式的系统资源可以直接用Application.GetResourceStream(uri).Stream在代码里来得到。

    SplashScreen

    "SplashScreen"是这个选项是WPF的启动画面使用的。Silverlight启动加载画面是用的其他方式实现的,所以在Silverlight里不要用这个方式。

    EntityDeploy

    这个是EntityFramework采用的生成方式,在Silverlight里是没用。

  • 相关阅读:
    解决“Kali Linux终端打不开”
    国内网站备案。备案的是域名?还是服务器?
    Linux磁盘分区
    Linux各目录的作用
    vim基础操作
    基础算法-->堆排序
    期望,方差,标准差,正态分布
    平面向量
    基础算法 ---> 二分法
    学习人工智能准备了解的算法
  • 原文地址:https://www.cnblogs.com/ListenFly/p/2235059.html
Copyright © 2020-2023  润新知