none
Properties中资源文件和直接设定资源文件的区别? RRS feed

  • 问题

  • 大家好,还是资源文件的问题:

    在VS中,我可以通过右键项目,选择Properties然后添加图片创建资源文件,也可以直接把一个图片拷贝到项目中,设定其“编译属性”(BuildAction)为“Embeded Resources”(嵌入式资源)。请教这两种方式都可以成为资源文件吗?最大的区别在什么地方?谢谢!(最好给出两个对比实验代码证明之)。

    另外一个问题:在Properties中设定某个文件“Persistance”属性为“嵌入resx”和我在“BuildAction”中设定有区别吗?为什么通过前者设定依然无效?以下代码无法获取到图片内容?谢谢!

    Assembly.GetExecutingAssembly().GetManifestResourceNames()

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年2月27日 3:08
    版主

答案

  • 在. resx资源文件无论是链接”资源和“嵌入”资源,都会把JPG文件嵌入到EXE中,不过只能通过ResourceManager来获取。
    而在BuildAction中选择“嵌入”资源,则资源会被再次嵌入EXE(包括上面那个嵌入的,EXE中会有2个JPG图片),并且只能通过GetManifestResourceStream来获取,
    2012年2月27日 7:10
  • okay,另外需要注意的是“字符串资源总是嵌入的资源,无法更改;文件资源总是链接的资源,也无法更改。”
    2012年2月27日 8:08

全部回复

  • 在. resx资源文件无论是链接”资源和“嵌入”资源,都会把JPG文件嵌入到EXE中,不过只能通过ResourceManager来获取。
    而在BuildAction中选择“嵌入”资源,则资源会被再次嵌入EXE(包括上面那个嵌入的,EXE中会有2个JPG图片),并且只能通过GetManifestResourceStream来获取,
    2012年2月27日 7:10
  • okay,另外需要注意的是“字符串资源总是嵌入的资源,无法更改;文件资源总是链接的资源,也无法更改。”
    2012年2月27日 8:08
  • 哦,我明白了,Resx文件无论是哪种形式,都会被编译进入到exe中:

    1)连接时编译:当编译的时候,先读取Resource中相对路径的图片,然后转化成二进制形式,被一同编译进入了exe中。但是如果另外一个项目要使用这个Resource文件,因为Resource中只存储了一个相对地址(你不把这个相对地址的图片以及文件夹拷贝过来,在编译的时候因为无法找到真正对应的图片,可能导致编译错误)。

    2)嵌入编译:直接嵌入到exe和Resources中。因为Resource中直接嵌入了图片元数据,因此无需真正图片了,只要拷贝一个Resource文件加入项目,然后编译即可。

    3)至于BuildAction:也不管相对还是绝对路径,囫囵吞枣把这个pic文件一起编译进入了exe,体积明显增大了许多。

    上面1、2只能使用:ResourceManager读取,3)只能使用Assemby的GetManifestResourceStream方式读取。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年2月28日 3:17
    版主